双列集合
单列集合一次只能添加一个元素
双列集合一次可以添加一对元素(键与值一一对应)
键值对 — Entry 对象
双列集合的特点
Map集合常见API
双列集合添加用put 而不是add
遍历
- 键找值
- 键值对
- lambda表达式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| Map<String,String> map = new HashMap<>();
Set<String> keys = map.keySet();
for (String key : keys) { System.out.println(key); map.get(key); }
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) { String key = entry.getKey(); String value = entry.getValue(); System.out.println(key + "=" + value); }
map.forEach(new BiConsumer<String, String>() { @Override public void accept(String key, String value) { System.out.println(key + "=" + value); } });
map.forEach((String key ,String value)->{ System.out.println(key + "=" + value); } );
map.forEach((key,value) -> System.out.println(key + "=" + value));
|
HashMap的底层原理
首先创建长度位16 默认加载因子为0.75的数组
put方法先创建Entry对象 -> 利用键 计算哈希值 得到索引插入
如果位置已经有元素 调用hashcode() 方法计算键的哈希值
如果值是一样的 则覆盖原来索引节点上的Entry对象
如果键不一样则会添加新的Entry对象
JDK8:后
LinkedHashMap
有序
TreeMap
TreeMap自定义排序
1 2 3 4 5 6 7 8 9 10 11
|
TreeMap<Integer,String> tm = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } });
|