List接口
B站 韩顺平 老师课程的笔记
List接口
List接口的介绍
List接口是Collection的子接口
- List集合类中的元素有序(即添加顺序和取出顺序一致)、且可重复
- List集合类中的每个元素都有其对应的顺序索引,即支持索引(List特点)
- List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素
- 常见的实现类有:ArrayList、LinkedList、Vector(基本一样,很多都有的方法,例如add,remove,set等)
选择使用
- ArrayList效率高,但多线程的时候不安全,在非多线程的情况下使用ArrayList更好
- Vector线程安全,在多线程情况下考虑用Vector更好
- LinkedList增删效率最高,因为底层不是用数组实现的,线程也不安全
ArrayList与Vector比较
底层结构 | 版本 | 线程安全(同步)效率 | 扩容倍速 | |
---|---|---|---|---|
ArrayList | 可变数组 | jdk1.2 | 不安全,效率高 | 如果是有参构造器就扩容1.5倍;如果是无参,第一次讲容量设为10,从第二次开始就扩容1.5倍 |
Vector | 可变数组Object[] | jdk1.0 | 安全,效率不高 | 如果是无参,默认容量为10,满后,就按2倍扩容;如果指定大小,则每次直接2被扩容 |
ArrayList与LinkedList比较
底层结构 | 增删的效率 | 改查效率 | |
---|---|---|---|
ArrayList | 可变数组 | 较低,需要数组扩容 | 较高,直接改下标位置值 |
LinkedList | 双向链表 | 较高,通过链表追加,不需要扩容 | 较低,需要再建立连接等操作 |
所以改查多用ArrayList,改查少用LinkedList
一般来说改查用到都多,一般都是ArrayList
List常用方法介绍
常用方法:
- void add(int index, Object ele):在 index 位置插入 ele 元素
- boolean addAll(int index, Collection eles):从 index 位置开始将 eles 中的所有元素添加进来
- Object get(int index):获取指定 index 位置的元素
- int indexOf(Object obj):返回 obj 在集合中首次出现的位置
- int lastIndexOf(Object obj):返回 obj 在当前集合中末次出现的位置
- Object remove(int index):移除指定 index 位置的元素,并返回此元素
- Object set(int index, Object ele):设置指定 index 位置的元素为 ele , 相当于是替换. list.set(1, “玛丽”);
- List subList(int fromIndex, int toIndex):返回从 fromIndex 到 toIndex 位置的子集合
1 | public static void main(String[] args) { |
使用普通for遍历输出
由于List有索引的特点索引可以有第三种遍历输出方式(实现了List的类都可以)
第一种为迭代器输出,第二种为增强for循环输出(底层还是迭代器输出),具体看文章集合
代码展示
1 | for(int i = 0;i<list.size();i++){ |
常用类解析
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 秋白's Blog!
评论