Java集合–HashMap
-
简介
HashMap是Java集合的一种,实现了Map接口,使用频率非常高。
HashMap中存储的是Entry<>键值对<key,value>,key与value一一对应,在Map中Key值是唯一的,但value值可以有重复。
HashMap的特点有:
- 允许空键和空值(但空健只能有一个,且放在第一位)
- 元素是无序的,而且输出顺序和存放顺序不一样
- key值不能重复
- 底层的实现是数组+链表,JDK8后又加了红黑树,链表长度达到8之后变成红黑树
- 可以在o(1)时间定位到要查询的数据
- 同一时间内可以有多个线程同时读写,所以是线程不安全的
- 常用方法
-
创建
HashMap<Integer,String> map = new HashMap<>(); Map<String,String> map1 = new HashMap<>();
-
添加元素:put()
map.put(1,"one");
-
取出元素:get()
String val = map.get(1); // "one" String val2 = map.get(5); // null
-
判断为空:isEmpty()
map.isEmpty(); // false
-
判断是否含有key:containsKey(key)
map.containsKey(2); // false
-
判断是否含有value:containsValue(value)
map.containsValue("one"); // true
-
删除key对应的值:remove(key)
String str = map.remove(1); // "one"
-
删除键值对:remove(key,value)
map.remove(1,"two"); // 键值对不存在时,返回false map.remove(1,"one"); // 键值对存在时,删除并返回true
-
HashMap中元素的个数
map.size();
-
显示所有的value:values()
map.values(); // []
-
显示所有的key:keySet()
map.keySet(); // []
-
显示所有的key和value:entrySet()
map.entrySet(); // [key1=value1]
-
替换key对应的value:replace(key,new_value) (Java8)
map.replace(key,new_value); // old_value
-
将同一类型的map添加到另一个map中:putAll(map)
map.putAll(map1);
-
克隆:clone()
Object clo = map.clone(); // clo = map
-
清空:clear()
map.clear();
-
若key不存在或其value值为null,则执行put,否则不执行:putIfAbsent(key,value)(java8)
map.putIfAbsent(1,"new_one"); // [1,"one"]存在,不执行put map.putIfAbsent(3,"three");
-
根据条件设置value:compute(key, 条件?A:B)(java8)
map.compute(1,<k,v>->v==null?"one":"two"); //当键1对应的value为null时,将其设为"one",否则设为"two"
- 遍历HashMap
- 通过
entrySet()
创建一个迭代器。
Iterator it = mp.entrySet().iterator(); //iterator迭代器
while (it.hasNext()) { // hasNext(),迭代器不为空
Map.Entry pairs = (Map.Entry)it.next(); // next(),返回下一个(key,value)
System.out.println(pairs.getKey() + " = " + pairs.getValue());
}
- 直接利用for-each循环。
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Map.Entry<Integer, Integer> entry : map.entrySet()) { //Map.Entry对象与 // entrySet()
System.out.println("Key = " + entry.getKey() + ", Value = " +
entry.getValue());
}