List集合
1.1 list概述
- List接口继承Collection接口,实现了List接口的类称为List集合。
- 在List集合中允许出现重复的元素,所有元素以线性方式进行存储,可以通过索引来访问集合中指定的元素。List集合的元素的存储顺序和取出顺序一致。
- List不但继承了Collection接口中的全部方法,还增加了一些根据元素位置索引来操作集合的特有方法。
- list集合主要分为Arraylist、Linkedlist、Vector。
1.2 ArrayList集合和LinkedList集合的区别:
-
ArrayList集合底层是数组,而且是Object [] 类型;而LinkedList集合底层是链表。
-
ArrayList集合查询数据很快,但是增删数据很慢;LinkedList集合增删数据很快。但是查询数据很慢。
1.3 List集合中常用方法:
-
add(Object object):向集合中添加数据
-
get(int index):获取集合中指定的索引位置的元素数值
-
size():获取集合的长度
-
isEmpty():判断集合是否为空
-
contains(Object object):判断结合中是否含有指定的这个元素
-
set(int index, Object object):更改集合中指定索引位置的元素数值
-
toArray():将集合转换为数组
-
remove(int index):删除集合中指定索引位置的元素数值
-
clear():清空集合元素数值,谨慎使用
1.4 ArrayList集合
-
(1)ArrayList是List接口的一个实现类,它是程序中最常见的一种集合类;
-
(2)在ArrayList内部封装了一个数组对象,初始长度缺省为10,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来重新容纳这些元素,因此可以将ArrayList集合看作一个长度可变的数组;
-
(3)ArrayList集合类的大部分方法都是从父类Collection和List继承过来的,其中add()方法和get()方法用于实现元素的添加和读取。
-
(4)ArrayList集合的内部使用一个数组来保存元素。在删除元素时,会将被删除元素之后的元素都向前移一个位置以填补空位;而在用add(int index, Object element)方法添加元素时,是把元素插入index指向的位置,先把该位置的元素以及后续元素都向后移一个位置,如果超出数组的容量,会创建更大的新数组。因为增删元素会导致大量的内存操作,所以效率低,但ArrayList集合允许通过索引随机的访问元素,查询效率高。
-
(5)集合和数组一样,索引的取值范围是从0开始,到size-1为止(size是集合的长度),不能超出此范围,否则会引发异常。add(Objecto)方法是把元素添加到集合的尾部,而add(int index, Object o)是把元素添加到由索引index指定的位置。
1.5 LinkedList集合
-
(1)List接口的另一个实现类LinkedList,克服了ArrayList集合在增删元素时效率较低的局限性。但是LinkedList集合的查询效率低(不支持随机访问),要查询第n个元素,必须从第一个元素开始,逐一的向后遍历,直到第n个元素。
-
(2)该集合内部维护了一个双向链表,链表中的每个元素都通过对象引用来记住它的前一个元素和后一个元素,从而将所有的元素彼此连接起来。
-
(3)当插入一个新元素时,只需要修改元素之间的引用关系即可,删除一个节点也是如此。
-
*(4)linkedList 底层采用的不是单向链表,而是双向循环列表。
1.6 Vector
实现了一个list接口,表示一个可变的对象数组,主要用于多线程环境下。