集合类的全景图
常用集合类特性
1. Collection:每个位置对应一个元素1.1: List 存放有序元素,允许重复元素,允许元素为null1.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: TreeMapkey不能为null,value可以为null;存放有序(字符串默认为字典排序),线程不安全;
拓展
- 红黑树、以及在TreeMap、HashMap中的应用