基本概念

  • java.util.Map<K,V>集合中存取元素的基本单位是:单对元素,类型参如下:
    • K - 维护的键(Key)的类型,相当于目录
    • V - 映射值(Value)的类型,相当于内容
    • 该集合中key是不允许重复的,而且一个key只能对应一个value
  • Map集合的主要实现类有:HashMap类、TreeMap类、LinkedHashMap类、Hashtable类、Properties
    • HashMap类的底层是采用哈希表进行数据管理的。
    • TreeMap类的底层是采用红黑树进行数据管理的。
    • LinkedHashMapHashMap的不同之处在于内部维护了一个双向链表,链表中记录了元素的迭代顺序,也就是元素插入集合中的先后顺序,因此便于迭代。
    • Hashtable类是古老的Map实现类,与HashMap类相比属于线程安全的类,且不允许null作为key或者value的数值。
    • Properties类是Hashtable类的子类,处理属性文件,keyvalue都是String类型

Map集合是面向查询优化的数据结构, 在大数据量情况下有着优良的查询性能。

经常用于根据key检索value的业务场景。

常用的方法

方法声明 功能介绍
V put(K key, V value) 将Key-Value对存入Map,
若集合中已经包含该Key,
则替换该Key所对应的Value,
返回值为该Key原来所对应的Value,
若没有则返回null
V get(Object key) 返回与参数Key所对应的Value对象,如果不存在则返回null
boolean containsKey(Object key) 判断集合中是否包含指定的Key
boolean containsValue(Object value) 判断集合中是否包含指定的Value
V remove(Object key) 根据参数指定的key进行删除
Set keySet() 返回此映射中包含的键的Set视图
Collection values() 返回此映射中包含的值的Collection视图
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射的Set视图

Map集合 - 图1

声明

  1. public class MapDemo {
  2. public static void main(String[] args) {
  3. //1.声明Map集合
  4. //泛型,左边不可以省略类型,右边<>可以省略
  5. Map<String, String> m1 = new HashMap<>();
  6. System.out.println("m1:" + m1);//{}
  7. }
  8. }

Map集合 - 图2

put()返回放入的key对应位置是否有元素,如果有则返回value,如果没有则返回null,然后添加进去。

添加

put()

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class MapDemo {
  4. public static void main(String[] args) {
  5. //1.声明Map集合
  6. //泛型,左边不可以省略类型,右边<>可以省略
  7. Map<String, String> m1 = new HashMap<>();
  8. System.out.println("m1:" + m1);//{}
  9. String put = m1.put("1", "hello");
  10. System.out.println("原来的value值:"+ put);//null
  11. System.out.println("m1:" + m1);//{1=hello}
  12. put = m1.put("2", "map");
  13. System.out.println("原来的value值:"+ put);//null
  14. System.out.println("m1:" + m1);//{1=hello, 2=map}
  15. put = m1.put("three", "hashMap");
  16. System.out.println("原来的value值:"+ put);//null
  17. System.out.println("m1:" + m1);//{1=hello, 2=map, three=hashMap}
  18. }
  19. }

修改

put()

  • 根据key去查找对应是否存在,因为map集合里面的key是唯一的,也可以说Map集合的key是一个Set集合
  1. //实现修改
  2. put = m1.put("three", "Good");
  3. System.out.println("原来的value值:"+ put);//hashMap
  4. System.out.println("m1:" + m1);//{1=hello, 2=map, three=Good}

Map集合 - 图3

集合判断

  • containsKey():查找key是否存在
  • containsValue():集合查找value是否存在
  1. //集合 查找key
  2. boolean b1 = m1.containsKey("1");
  3. System.out.println("查找key为1的结果:" + b1); // true
  4. b1 = m1.containsKey("11");
  5. System.out.println("查找key为11的结果:" + b1); // false
  6. //集合查找value
  7. b1 = m1.containsValue("hashMap");
  8. System.out.println("查找value为hashMap的结果:" + b1); // false
  9. b1 = m1.containsValue("map");
  10. System.out.println("查找value为map的结果:" + b1); // true

获取元素

  • 根据前面的key查找的结果为true来进行获取,也可以直接获取
  1. //集合根据key获取value
  2. String str = m1.get("5");
  3. System.out.println("str2 = " + str); // null
  4. str = m1.get("3");
  5. System.out.println("str2 = " + str); // map

删除元素

  1. //集合中元素的删除操作
  2. str = m1.remove("1");
  3. System.out.println("被删除的value是:" + str); // hello
  4. System.out.println("m1 = " + m1); // {2=map, 3=map, three=Good}

获取集合的所有key

  • Set集合不允许有重复元素,所以返回的key的集合是一个Set集合
  1. //获取集合的所有key 组成Set视图 并不是新的set集合
  2. Set<String> keySet = m1.keySet();
  3. // 遍历所有的key
  4. for (String key : keySet) {
  5. //根据key获取value
  6. String value = m1.get(key);
  7. System.out.println(key + "=" + value);
  8. }
  1. 2=map
  2. 3=map
  3. three=Good

获取集合的所有value

  • Collection集合可以有重复元素
//获取集合的所有value  组成Collection视图 并不是新的Collection集合
Collection<String> values = m1.values();
//遍历所有的value
for (String va:values) {
    System.out.println("value:" + va);
}
value:map
value:map
value:Good

获取集合每个键值对

//获取Map集合中所有的键值对并组成Set视图
Set<Map.Entry<String, String>> entries = m1.entrySet();
for (Map.Entry<String, String> en:entries) {
    System.out.println(en);
}
2=map
3=map
three=Good