/*
java.util.Map<K,V>是双列集合的根接口,java.util.Collection<E>是单列结合的根接口,它俩没有关系
Map接口有两个泛型:
第一个泛型:键的类型
第二泛型:值的类型
二者可以相同,也可以不同
特点:
1.键必须唯一
2.可以根据键获取值
3.但不能根据值找键
4.将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
常用的实现类:
1.HashMap集合:HashSet集合底层采用的是HashMap,所以HashMap里面也有一个哈希表结构,所以查询速度特别快
哈希特性:针对的是键(键无序,不可重复)
2.LinkedHashMap集合:是HashMap的子类,里面也有一个哈希表结构,额外提供了一个双向链表,用来维护顺序(存入和取出的顺序是一致)
链表的特性和哈希特性:针对的是键(键有序,不可重复)
3.TreeMap集合:可以实现排序
Map集合要求键唯一,所以如果采用自定义类型作为键的话,必须覆盖重写equals和hashCode方法
Map接口中定义了很多方法,常用的如下:
- public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。
-如果key不存在,返回的值null
-如果键存在,返回的是键对应的之前的value值
- public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
- public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
- public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。
- Collection<V> values() :获取所有的值对应的Collection集合
*/
public class Demo01Map {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
String value = map.put("001", "张三");
System.out.println(map);//{001=张三}
System.out.println(value);//null
value = map.put("001","张三三");
System.out.println(value);//张三
System.out.println(map);//{001=张三三}
System.out.println("===========");
map.put("002", "李四");
map.put("003", "王五");
map.put("004", "赵六");
System.out.println(map);//{001=张三三, 002=李四, 003=王五, 004=赵六}
String whoRemoved = map.remove("001");
System.out.println("谁被删除了呢?"+whoRemoved);//张三三
System.out.println(map);//{002=李四, 003=王五, 004=赵六}
System.out.println( map.remove(100));//null,如果指定的键不存在,返回null
System.out.println("============");
String name = map.get("004");//获取004键对应的值
System.out.println(name);//赵六
name = map.get("040");//获取040键对应的值,不存在返回null
System.out.println(name);//null
System.out.println("============");
System.out.println("map集合中有几对元素: "+map.size());
System.out.println("map集合是否为空: "+map.isEmpty());
//获取map集合所有的键对应的Set集合
Set<String> set = map.keySet();
//遍历
//迭代器
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String id = it.next();
System.out.println(id);
}
System.out.println("============");
//使用增强for
for(String s : set) {
System.out.println(s);
}
for(String s : map.keySet()) {
System.out.println(s);
}
System.out.println("============");
//获取所有的值对应的集合
Collection<String> coll = map.values();
//迭代器...
//增强for
for(String s : coll) {
System.out.println(s);
}
System.out.println("============");
//增强for
for(String s : map.values()) {
System.out.println(s);
}
}
}
/*
添加:put
根据键获取值:V get(Object key)
根据键删除:V remove(Object key)
获取所有的键对应的集合:keySet
获取所有的值对应的集合:values
*/