集合类的全景图
常用集合类特性
1. Collection:每个位置对应一个元素
1.1: List 存放有序元素,允许重复元素,允许元素为null
1.1.1: ArrayList:
内部结构为数组;
初始容量为10;
插入、删除的移动速度慢;动态扩容1.5倍;
线程不安全;
1.1.2: LinkedList:
内部结构为双向链表;
线程不安全;
1.1.3: Vector:
内部结构是数组,与ArrayList很像;
初始容量为10;
线程安全;
动态扩容为原来的两倍;
已废弃,替代品为:Collections.synchronizedList(ArrayList),使用包装类,改进点为不再在每个方法都用synchronized修饰,而是细化,需要的代码块再使用,并且锁定的对象改为包装类内置的一个final Object对象;
1.2: Set 不允许重复元素
1.2.1: HashSet
底层实现是HashMap,存入key,value是固定的对象;
存放无序(根据hash值确定索引位置);
允许元素为null;
1.2.2: LinkedHashSet
底层基于LinkedHashMap;其他方面和HashSet相同;
因为有序,所以遍历性能比HashSet高,但是插入、删除性能差一些;
1.2.3: TreeSet
是SortedSet接口的唯一实现类;
不允许重复元素,不允许元素为null(元素为null,排序算法那块会导致空指针);
自动对元素进行排序;
2. Map:以key-value键值对存在
2.1: HashMap
数据结构为桶(数组)+ 链表 + 红黑树(JDK 1.8开始有红黑树)实现;
初始容量为16;
允许key和value为null,key重复会覆盖;
存放无序(根据hash值来进行散列),线程不安全;
2.1: LinkedHashMap
数据结构为双向链表;
存放有序,线程不安全;
2.1: TreeMap
key不能为null,value可以为null;
存放有序(字符串默认为字典排序),线程不安全;
拓展
- 红黑树、以及在TreeMap、HashMap中的应用