双列集合特点
1.双列集合一次需要存一对数据,分别为键和值
2.键不能重复,值可以重复
3.键和值是一一对应的,每一个·键只能找到自己对应的值
4.键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做Entry对象“;
Map中常见的API
put(K key,V value) 添加元素
remove(Object key) 根据键删除键值对元素
clear() ; 移除所有的键值对元素
containsKey() 判断集合是否包含指定的键
containsValue() 判断集合是否包含指定的值
isEmpty() 判断集合是否为空
size() 集合的长度
Map的遍历方式
1. 增加for lambda 迭代器
2.根据键值对遍历
Set<Map.Entry<String,String>>s=m.entrySet(); for(Map.Entry<String,String>m1:s){ String key=m1.getKey(); String value=m1.getValue(); System.out.println(key+" "+value); }3.lambda
m.forEach(new BiConsumer<String, String>() { @Override public void accept(String s, String s2) { System.out.println(s+"="+s2); } }); m.forEach((key,value)->System.out.println(key+"="+value));
HashMap的底层原理
只看键的哈希值,来进行键的插入,如果哈希值一样并且键值一样,那么会将值覆盖,如果键不一样(哈希值一样),那么就让它挂在下面(如同链表一样)
LinkedHashMap
由键决定:有序,不重复,无索引 这里的有序指的是保证存储和取出的元素顺序一致
底层数据结构是依然哈希表,只要每个键值对元素又额外多了一个双链表的机制记录存储的顺序
TreeMap
由键决定特性:不重复,无索引,可排序
可排序:对键进行排序 默认按照键的从小到大进行排序,也可以自己规定键的排序规则
1.实现Comparable接口,指定比较规则
2.创建集合时传递Comparator比较器对象,指定比较规则