1.List接口概述
List 特征: 可重复,有序(有下标 )
(1)实现List接口的集合类中的元素是有序的,且允许重复。
(2)List集合中的元素都对应一个整数型的序号记载其在集合中的位置,可以根据序号存取集合中的元素。
JDK API所提供的List集合类常用的有:
ArrayList(重点,必须掌握)
LinkedList
Vector(并不常用,了解)
2.List常用方法
特有的方法:
add(int index, 元素) 在指定下标位置插入元素
Object get(int index) 获取指定位置的元素
int indexOf(元素) 找到这个元素第一次出现的位置
int lastIndexOf(元素) 找到这个元素最后一次出现的位置
remove(int index ) 删除指定位置上的元素
set(int index, 新的元素) 修改指定位置上的元素
List<E> subList(int fromIndex, int toIndex) 截取指定位置上元素, 不包括结束位置
3.ArrayList和LinkedList的区别
ArrayList 常用:
底层使用数组
自动扩容:
添加了10个元素, 添加11个, 新创建一个数组: 长度 = 旧数组长度 * 1.5 = 10*1.5 = 15, 再把旧数组中的元素拷贝到新数组, elementData 指向新数组
ArrayList 对elementData数组进行new操作, 初始化, 不是在new ArrayList() , 而是在第一次调用add() 方法
elementData[]={}
添加元素: 判断数组时候是否需要扩容
elementData的长度 < 最小容量(原来元素个数 + 1)
调用: grow(最小容量) 自动扩容
第一次添加元素: 初始化elementData = new Object[10];
这个集合已经有元素: 新数组长度 = 旧的数组长度 *1.5 进行数组的拷贝,
Arrays.copyof() 往elementData添加新元素 elementData[size++] = 新元素;
ArraylIst: 特征: 查找元素效率高, 插入,删除元素效率低
LinkedList:
LinkedList: 底层存储元素: 使用双向链表: 不连续的空间, 由n个节点组成, 节点就是一个对象: Node
LinkedList: 特征: 查询效率低, 插入,删除效率高
4.Vector与ArrayList的区别
1.Vector是jdk1.0出现的,老版本java使用的集合,注重安全,是线程安全的;
ArrayList是jdk1.2之后使用,注重性能,是非线程安全的.
2.当长度扩充时,Vector直接扩充一倍,而ArrayList是扩充50%
ArrayList默认长度为10个,当存满10个时,长度会自动扩充50%