一、双列集合
特点:
- 一次存储一对数据,分别为“键”和“值”
- 键不能重复,值可以重复(映射)
- 可以通过键找到对应的唯一值
- 键+值 这个整体称为键值对,或者键值对对象,JAVA中称为Entry对象
结构:
- 顶层接口MAP
- 实现类:HashMap,TreeMap
- HashMap子类:LinkedHashMap
二、MAP
1.常见API
put:(添加/覆盖)
- 在添加数据时,如果键存在,会把原有的键值对对象覆盖,返回原来键值对中的值
- 如果键不存在,则返回null
remove:
- 要传入键值,返回值是对应键值对中的值
2.遍历方式
- 1.键找值:因为键是独立的,可以用一个Set集合存放所有键,Map中有写好的方法keySet()
Set<String> keys = map.KeySet();
- 2.键值对:依次获取每个键值对对象,获取键和值
entrySet();//获取键值对对象
getKey(); //获取键
getValue();//获取值
- 例:
- 需要注意Entry是Map的内部接口,类似内部类那里的类名调用,也可以导入包java.util.Map.Entry,导包后就不用写Map.了
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
public class Demo1 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("114", "514");
map.put("115", "515");
map.put("116", "516");
Set<Map.Entry<String, String>> entries = map.entrySet();
//Entry是Map的内部接口,如果导入包可以省略Map
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
- 3.lambda表达式
- 源码中,其实就是一个增强for遍历的形式,多了一个异常的抛出
default void forEach(BiConsumer<? super K,? super V> action)
三、HashMap
特点:
- 方法使用Map中的即可
- 集合的特点由键决定,键是无序、不重复、无索引的
- 底层原理和HashSet一样,都是哈希表结构(注意哈希值只与键有关)
底层原理:可以看这个视频,我个人觉得讲的很好
集合进阶-13-HashMap源码超详细解析(一)_哔哩哔哩_bilibili
四、LinkedHashMap
特点:
- 由键决定:有序、不重复、无索引
- 有序:保证数据的存入和取出的顺序一致,底层依旧是多了一个双链表的机制,能记录前后节点
五、TreeMap
特点:
- 底层和TreeSet一样,都是红黑树结构
- 可排序、不重复、无索引
- 可排序:可以对键进行排序
- 注意:默认按照从小到大进行排序,也可以自定义排序规则,和TreeSet类似
排序规则书写:
一:实现Comparable接口
二:创建集合时传递Comparator比较器对象