一,特点
- 是双列结合,一个元素包含(key,value),一一对应。
- key和value的类型可以相同也可以不同。
- key的值不允许重复,value可以重复。
- hashMap存储自定义类型键值,必须重写hashCode和equals方法 ,保证key值唯一。
二,常用子类
- HashMap
(1)实现了Map接口,查询快,底层哈希表。
(2)无序,存取顺序可能不一致。
- LinkedHashMap
(1)有序,存取顺序一致
三,常用方法
- put(key,value); //key存在,返回被替换的元素的value。不存在则返回null。
- get(key); //返回键所映射的值
- remove(key); //通过key删除元素,返回 被删除的值或者null。
- addAll(); //添加另一个集合里的元素。
- containsKey(); //返回boolean
- containsValue(); //返回boolean
- values() //获取集合全部的value值
Map<String,Integer> hashMap = new HashMap<>(); hashMap.put("huhu", 2); hashMap.put("koko",3 ); int huhu = hashMap.remove("huhu"); int haha = hashMap.remove("haha"); //空指针异常,返回值null不能赋值给int,Integer可以 // System.out.println(haha); System.out.println(huhu); //2 System.out.println(hashMap); //3
四,遍历Map集合
keySet()方法取出所有元素的key防盗一个集合中。
- 增强for遍历
Set<String> strings = hashMap.keySet(); //所有key保存到strings集合中 for (String keys: strings) { Integer num = hashMap.get(keys); //get()方法返回value System.out.println(num); }
- Iterator遍历
Set<String> strings = hashMap.keySet(); Iterator<String> it = strings.iterator(); //实现类对象 while (it.hasNext()){ String s = it.next(); Integer num = hashMap.get(s); System.out.println(num); }
- 获取键值对对象并遍历
Set<Map.Entry<String, Integer>> en = map.entrySet(); //返回键值对对象 for (Map.Entry<String, Integer> str : en) { System.out.println(str.getKey() + "==" + str.getValue()); }
- foreach遍历
map.forEach((a, i1) -> System.out.println(a + "=" + i1));
map.forEach(new BiConsumer<>() { @Override public void accept(String t, Integer integer) { System.out.println(t + "=" + integer); } });