- Collection接口: 单列集合最顶层的接口,单列集合中的共性内容,所有单列集合都可以使用。
- List接口 / 集合: 有存储顺序,允许存储重复元素。
- ArrayList类(重点): 底层是数组实现的, 查找快, 增删慢。由于是数组实现,在增和删的时候会牵扯到数组增容,以及拷贝元素,所以慢。而数组是可以直接按索引查找, 所以查找时较快,一个普通的for循环可以遍历。
- LinkedList类: 底层是链表实现的, 增删快, 查找慢。由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素, 后一个元素记住前一个元素. 这样的增删效率较高但由于没有索引,查询时需要一个一个的遍历, 所以查询效率较低。
- Vector类(了解): 和ArrayList原理相同,但线程安全, 效率略低,和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低 。
- Set接口 / 集合: 无存储顺序, 不允许存储重复元素,无索引。
- HashSet类 (重点):底层是哈希表(+红黑树)实现的。
- TreeSet类(了解):底层是二叉树实现,一般用于排序。
- LinkedHashSet类:可以保证存取顺序,底层是哈希表+链表实现的。注意它是HashSet类的子类。
- List接口 / 集合: 有存储顺序,允许存储重复元素。
本文内容:List集合及其实现类 / 子类
List接口(有序的Collection,也成为序列)
List集合是单列集合的重要分支,习惯性将List接口的对象称为List集合,允许有重复元素,线性存储,索引访问,元素有序。
总结:
List常见方法(假设用名为list的List对象来调用):
list.add(“Z”);
添加元素Z
list.add(1, "X");
在索引1处添加元素X
list.remove(2);
移除索引2处的元素
list.set(2, "Y");
将索引2处元素替换为Y
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
// 打印集合,因为重写了toString所以是内容不是地址
System.out.println(list);//[A, B, C]
// 指定位置添加元素
list.add(1, "X");
System.out.println(list);//[A, X, B, C]
// 移除指定位置元素,并返回