ArrayList,Vector,LinkedList
List接口
List是一个接口,继承了Collection
List 常用的实现
ArrayList,由数组实现的list。查找快,增删慢。
List lst = new ArrayList();
ArrayList <E> // 带泛型的ArrayList
List<String> lst = new ArrayList<String>();
Vector,与ArrayList类似,由数组实现,但是是线程安全的,某一时刻只能有一个线程写Vector。
Vector vec = new Vector(); // 不指定大小
Vector vec1 = new Vector(int size); // 指定大小
Vector vec2 = new Vector(int size, int incr); // 指定大小和每次递增的量
Vector vec3 = new Vector(Collection c); // 创建包含集合c元素的向量
LinkedList,链式结构的list。增删快,查找慢。
同时实现了Queue,既可以用作列表,也可以用作队列和双向队列。
List lst = new LinkedList();
LinkedList <E> // 带泛型的LinkedList
List<String> lst = new LinkedList<String>();
List的相关方法
返回类型 | 方法名称 | 描述 |
---|---|---|
void | add(int index, E element) | 指定位置添加元素 |
boolean | addAll(int idx, Collection c) | 将集合c插入到指定位置 |
int | indexOf(Object o) | 获取指定元素的索引 |
int | size() | 返回列表的大小(元素数量) |
boolean | isEmpty() | 判空 |
E | set(int index, E element) | 替换指定位置的元素,返回更新前的元素 |
E | get(int index) | 获取指定索引的元素 |
E | remove(int index) | 删除指定索引的元素 |
boolean | removeAll(Collection c) | 删除列表是所有集合c中元素 |
add方法: 创建列表之后,添加元素要从位置0开始,依次添加, (可以add null值):
List<String> lst = new ArrayList<String>();
lst.add(0,"zero");
lst.add(1,"one");
lst.add(null); // add的值可以是null
如果调换了顺序,则会报错,如下面
List<String> lst = new ArrayList<String>();
lst.add(1,"one"); // 直接从位置1开始添加,会报错
lst.add(0,"zero");
set方法: 看上去是设置某个位置上的元素,实际上是替换,要求替换的位置上必须先有元素,不能为空,因为它会返回替换前的元素。
set方法速度很快,类似的还有get()
List<String> lst = new ArrayList<String>();
lst.add(0, "zero");
lst.set(1, "one"); // 由于位置1没有元素,直接set新元素会抛出异常
如果需要向空列表中乱序添加元素,可以先全部初始化为null,然后再用set替换。
List<String> lst = new ArrayList<String>();
lst.add(null);
lst.add(null);
lst.add(null);
lst.set(0, "zero");
lst.set(1, "one");
lst.set(2, "two");