目录
List集合存储元素的特点:
- 有序可重复
- 有序:存进去的顺序和取出的顺序相同,每一个元素都有下标。
- 可重复:存进去1,还可以存储一个1。
List接口中常用的方法:
- List集合存储元素特点:有序可重复。
- 有序:List集合中的元素有下标,从0开始,以1递增。
- 可重复:存储一个1,还可以再存储1。
- List既然是Collection接口的子接口,那么肯定List接口有自己的特色方法:
- void add(int index , Object element); //在列表的指定位置插入指定元素,(第一个参数是下标)
- Object remove(int index); // 删除指定下标位置的元素
- Object set(int index , Object element); //修改指定位置的元素
- Object get(int index); // 根据下标获取元素
- int indexOf(Object obj); //获取指定对象第一次出现处的索引
- int lastIndexOf(Object obj); //获取指定对象最后一次出现处的索引
- List[] subList(int fromIndex,int toIndex); // 返回从fromIndex到toIndex位置的子集合,顾头不顾腚
List集合的三种遍历方式
ArrayList集合的特点:
- 1、默认初始化容量10(底层先创建了一个长度为0的数组,当添加第一个元素的时候,初始化容量10)。
- 2、构造方法:
- new ArrayList();
- new ArrayList(int capacity);
- 3、ArrayList集合的扩容:
- 增长到原容量的1.5倍,底层是:原容量 + (原容量 >> 1) , 就是原容量 * 1.5
- ArrayList集合底层是数组,怎么优化?
- 尽可能少的扩容,因为数组扩容效率比较低,建议在使用ArrayList集合的时候
- 预估计元素的个数,给定一个初始化容量。
- 4、数组的优点:
- 检索效率比较高。
- 5、数组的缺点:
- 随机增删元素效率比较低。
- 另外数组无法存储大数据量。(很难找到一块非常巨大的连续的内存空间)
- 6、向数组末尾添加元素,效率很高,不受影响。
- 7、ArrayList不是线程安全的集合。在多线程的情况下,不建议使用ArrayList。
- 8、怎么将一个线程不安全的ArrayList集合转换成线程安全的呢?
- 使用集合工具类:java.util.Collections;
- List list = Collections.synchronizedList(new ArrayList());
Vector集合的特点:
- 1、底层也是一个数组。
- 2、初始化容量是:10
- 3、怎么扩容呢?
- 扩容之后是原容量的2倍。
- 4、Vector中所有的方法都是线程同步的,都带有synchronized关键字,
- 所以是线程安全的,效率比较低,使用较少。
LinkedList集合的特点:
- 1、LinkedList集合底层是双向链表。
- 2、链表的优点:
- 由于链表上的元素在空间存储上内存地址不连续。所以随机增删元素的时候不会有大量元素位移,因此随机增删效率较高。
- 在以后的开发中,如果遇到随机增删集合中元素的业务比较多时,建议使用LinkedList
- 3、链表的缺点:
- 不能通过数学表达式计算被查找元素的内存地址,每一次查找都要从头节点开始遍历,直到找到为止,所以LinkedList集合检索/查找的效率较低。
- 4、LinkedList集合有初始化容量吗? 没有。最初这个链表中没有人任何元素。first和last引用都是null。