-
Map是一个接口.只要实现了该接口的类都是双列集合,Map集合每次都要存两个元素(键值对)
-
通俗一点就是Collection(单列集合)就是单身狗只能存一个元素,Map就像出双入对的情侣不能分开
-
通过键能找到对应的值
-
键必须是唯一的,但是值可以重复
创建
集合只能放包装类,所以int类型要放对应的包装类,以下用的是Map的子类HashMap来创建
Map<Integer, String> map = new HashMap<>();
//创建自定义类型
Map<Student, String> studentStringMap = new HashMap<>();
//若需要有序的存放用用LinkedHashMap
Map<String, String> map = new LinkedHashMap<>();
当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法
常用方法
具体方法请查看API文档,以下只列了增删改查的方法
public V put(K key, V value) : 添加键值对添加到Map集合中(修改也是用这个方法,键相同,值输入新的值就会覆盖旧的元素)
public V remove(Object key) : 把对应的元素在Map集合中删除,返回被删除元素的值
public void clear() :删除所有键值对
public V get(Object key) 根据指定的键,获取对应的值
public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
遍历
方法一
-
调用public Set<K> keySet()方法获得键集合,使用增强for或迭代器来遍历对象
-
使用增强for或者迭代器来遍历集合
-
调用get方法根据键来获得对应的值
//创建Map对象
Map<String, String> map = new HashMap<>();
//添加元素
map.put("001", "AA");
map.put("002", "BB");
map.put("003", "CC");
map.put("004", "DD");
map.put("005", "EE");
map.put("006", "AA");
//修改元素
map.put("001", "AAAAAAA");
map.put("002", "BBBBBBB");
//删除元素
map.remove("003","CC");
Set<String> set = map.keySet();
for (String s : set) {
System.out.print("key:"+s+" ");
System.out.println("value:"+map.get(s));
}
方法二
键值对方式,通过每个键值对(Entry)对象.获取对象中的键与值
-
获取集合的键值对对象,返回Set集合
-
遍历Set集合,获得每个键值对对象
-
通过键值对对象来获取键与值
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println("key:"+entry.getKey());
System.out.println("value"+entry.getValue());
}
注意
因为map集合是无序的,因此要实现元素排序可以使用LinkedHashMap来存放或者把map转成list集合再调用collections的方法来排序