Map接口:
Map是用于保存具有映射关系的数据(一组是key,一组是value)
1.它和Collection接口是一个平行关系
2.存放的数据是键值对(key-value)数据
* ①.key:Map中的键 它是不能重复,底层实现是采用Set
* ②.value:Map中的值 可以重复,底层实现是采用Collection(List)
* ③.Map实际上是提供了一个Entry内部类里封装key-value
3.Map集合的优点
* 类似于字典一样通过key找到对应的value,使用这种映射关系方便查找数据。
4.Map中常用的方法
Object put(Object key,Object value):添加元素|修改元素
Object remove(Object key):移除元素 删除一个key-value
void putAll(Map t):
void clear():清空元素
Object get(Object key):获取指定的value,如果没有找到对应的key则返回null
boolean containsKey(Object key):是否包含指定的key
boolean containsValue(Object value):是否包含指定的value
int size():集合的长度
boolean isEmpty():是否为空
boolean equals(Object obj)
Set keySet():返回Map所有key组成的集合Set
Collection values():返回Map所有的value组成的集合Collection
Set entrySet():返回Map中所有的键值对组成的Set集合(每个集合都是一个Entry对象)
5.内部类Map.Entry
①.Map中包含一个内部类Entry,它封装了一个键值对
②.常用方法
-- getKey():获取Entry中包含的key值
-- getValue():获取Entry中包含的value值
6.实现类
①.HashMap:主要实现类
②.LinkedHashMap:使用链表的方式来添加Map元素的顺序(迭代顺序和插入顺序是一致的)
③.TreeMap
④.Hashtable:线程安全的,不建议使用,不允许使用null作为key,value
-- Properties:通常来处理属性文件,键值对都是String类型
实现代码
@Test
public void testMap() {
Map map = new HashMap();
// 添加元素(当向集合中添加相同的元素key相同时,保留的是后面的元素)
map.put("A", 123);
map.put("B", 456);
map.put("c", null);
map.put("B", 123);
map.put(new Person("D", 20), 111);
// 获取元素的个数
System.out.println(map.size());
System.out.println(map);
// 移除元素
map.remove("B");
System.out.println(map);
// 根据key更新value值
map.put("c", 119);
System.out.println(map);
// 获取元素
Object object = map.get("A");
System.out.println(object);
// 判断是否包含某个key值
boolean isContainsKey = map.containsKey("c");
System.out.println(isContainsKey);
// 清空Map元素
map.clear();
System.out.println(map);
// 判断Map是否为空
boolean empty = map.isEmpty();
System.out.println(empty);
}
Map的遍历
* 1.Map中的key是使用Set存储,不可重复
* 2.Map中的value使用Collection来存放,可以重复
* 3.一个键值对(key-value),就是一个Entry,Entry是使用Set来存放,也是不可重复。
* 4.当向Map中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同,如果相同,则添加后面的元素
实现代码
@Test
public void testMap2() {
Map map = new HashMap();
map.put("C罗", 35);
map.put("梅西", 33);
map.put("内马尔", 29);
map.put(null, null);
// 1.keySet() 遍历key的集合
Set Set = map.keySet();
for (Object obj : Set) {
System.out.println(obj);
}
System.out.println("--------------------------------");
// 2.values() 遍历values的集合
Collection values = map.values();
Iterator iterator = values.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println("--------------------------------");
// 3.entrySet() 遍历key-value
// 方式一
Set set1 = map.keySet();
for (Object obj : set1) {
// 得到key值
Object key = obj;
// 根据get(key)方法得到相应的value值
Object value = map.get(key);
System.out.println(key+"-"+value);
}
System.out.println("--------------------------------");
// 方式二
// Set entrySet = map.entrySet();
for (Object object : map.entrySet()) {
Entry entry = (Entry) object;
// 通过entry调用getKey()方法得到key值
Object key = entry.getKey();
// 通过entry调用getValue()方法得到value值
Object value = entry.getValue();
System.out.println(key+"-"+value);
}
System.out.println("---------------------------------");
// 方式三 通过forEach方法(JDK1.8的新特性)
map.forEach((key,value) -> System.out.println(key+"-"+value));
}