概述
- List接口继承Collection接口;
- 该接口属于数据结构中的线性结构,用户可以根据元素的整数索引来访问元素;
List接口实现类
- ArrayList(数组线性表)
a. List 接口的实现类。其内部基于一个大小可变数组来存储
b. 允许存储 null 元素 - LinkedList(双向链表)
a.List 接口的链接列表实现类
b.允许存储 null 元素 - Vector(向量)
a.功能和ArrayList一样
b.线程安全 - Stack(栈)
a.表示后进先出(LIFO)的对象堆栈
List接口常用方法
- add(Object element) 向列表的尾部添加指定的元素
- size() 返回列表中的元素个数
- get(int index) 返回列表中指定位置的元素,index从0开始
- add(int index, Object element) 在列表的指定位置插入指定元素
- set(int i, Object element) 将索引i位置元素替换为元素element并返回被替换的元素
- clear() 从列表中移除所有元素
- isEmpty() 判断列表是否包含元素,不包含元素则返回 true,否则返回false
- iterator() 返回按适当顺序在列表的元素上进行迭代的迭代器
- contains(Object o) 如果列表包含指定的元素,则返回 true
- remove(int index) 移除列表中指定位置的元素,并返回被删元素
- remove(Object o) 移除集合中第一次出现的指定元素,移除成功返回true,否则返回false
LinkedList新增方法
- void addFirst(Object o) 将指定数据元素插入此集合的开头,原来元素(如果有)后移
- void addLast(Object o) 将指定数据元素插入此集合的结尾
- Object getFirst() 返回此集合的第一个数据元素
- Object getLast() 返回此集合的最后一个数据元素
- Object removeFirst() 移除并返回集合表的第一个数据元素
- Object removeLast() 移除并返回集合表的最后一个数据元素
ArrayList线性表与数组的区别
声明ArrayList线性表与数组的区别:
- 两者本质的区别在与长度是否可变:数组是定长有序的线性集合;线性表是任意长度的线性集合
- 两者添加元素的方式不同:数组使用下标:array [index];数组线性表使用add方法:list.add(value)
- 两者获取元素的方式不同:数组使用下标:array [index];数组线性表使用get方法:list.get(index)
- 获取长度的方式不同:数组使用length属性;数组线性表使用size()方法
ArrayList是基于动态数组存储的数组线性表数据结构,使用连续的内存单元存储数据元素,对元素的遍历速度较快,LinkedList在遍历集合元素方面比较慢,因为在遍历过程中需要找寻下个元素的地址;
LinkedList是使用指针关联的双向链表数据结构,前一个元素都记录了后一个元素的地址,后一个元素也记录了前一个元素的地址,当添加或删除数据元素时,LinkedList比较快,因为ArrayList需要移动其被添加(或删除)元素后面(最后一个除外)的全部元素;