第三章:集合03
一:Collection下的List和Set接口
1. 框架结构
2. List接口
-
List存储元素的特点:有序且可重复(重复:集合中的元素可以重复,有序:存储进去的顺序和取出的顺序相同)
-
已实现的类。
(1)ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素,默认初始化容量10(底层先创建一个长度为0的数组,当添加第一个元素的时候,初始化容量10),每次扩容为原集合的1.5倍(注意源码)。
(2)LinkedList 底层数据结构是双向链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素。
(3)Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素,初始化容量10,每次扩容为原容量的2倍。 -
如何将一个线程不安全的集合转换为一个线程安全的
使用集合工具类: java.util.Collections; java.util.Collection; 集合接口 java.util.Collections; 集合工具类
public class VectorTest01 { public static void main(String[] args) { //创建一个Vector集合 Vector vector = new Vector(); //添加元素 //默认容量是10 vector.add(1); vector.add(2); vector.add(3); vector.add(4); vector.add(5); vector.add(6); vector.add(7); vector.add(8); vector.add(9); vector.add(10); vector.add(11); //如何使用线程安全 List mylist = new ArrayList(); Collections.synchronizedList(mylist);//这样就是线程安全了 mylist.add("111"); mylist.add("222"); mylist.add("3333"); } }
3. Set接口
- List存储元素的特点:无序且不重复(重复:集合中的元素不可以重复,无序:存储进去的顺序和取出的顺序不相同)
- 主要实现的类:
(1)HashSet:底层数据结构是哈希表(数组加链表(当链表长度超过8时自动转换成红黑树,当长度低于6是时自动转换成单向链表))****,初始容量16,每次扩容倍数为 2倍 。且底层实现是用HashMap存储方式,只不过是将值存储在HashMap中的key上面。
(2)TreeSet 底层数据结构是自平衡二叉树,且底层实现也是用的HashMap集合,初始化容量16,每次扩容倍数为 2倍 。