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!
评论