一、List和Set比较
1、List
(1)有序(存入和取出的顺序一致)
(2)元素都有索引(角标)
(3)元素可以重复
2、Set
(1)无序(有可能会有序,但几率不高)
(2)元素不能重复(唯一)
List和Set最严重的区别在于:是否有重复元素
二、List
1、有序的collection。此接口的用户可以对列表中每个元素的插入位置进行精确的控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素
2、List特有的常见方法,都有一个共性特点:都可以操作角标 -- List最大的特点。即 凡是可以操作角标的,都是List的特有方法
3、只有List集合可以实现对元素的增删改查(Collection不具备修改功能)
4、方法(凡是参数为角标的方法,返回值多为对象E)
(1)迭代器
Iterator<E> iterator():返回按适当顺序在列表的元素上进行迭代的迭代器
ListIterator<E> listIterator():返回此列表元素的列表迭代器(按适当顺序)
ListIterator<E> listIterator(int index):返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。指定的索引表示next()的初始调用所返回的第一个元素
(2)添加
void add(int index, E element):在列表的指定位置插入指定元素
boolean addAll(int index, Collection<? extends E> c):将指定集合c中的所有元素都插入到列表中的指定位置
boolean add(E e):向列表的尾部添加指定的元素
boolean addAll(Collection<? extends E> c):将指定集合c中的所有元素添加到此列表的结尾
List list = new ArrayList();
list.add("abc1");
list.add("abc2");
System.out.println(list); //[abc1, abc2]
//新插入的元素在角标1的位置上
list.add(1, "abc3");
System.out.println(list); //[abc1, abc3, abc2]
List list = new ArrayList();
list.add(0, "zhangsan");
list.add(0, "lisi"); //[lisi, zhangsan]
// list.add(1, "wangwu"); //[lisi, wangwu, zhangsan]
// list.add(2, "wangwu"); //[lisi, zhangsan, wangwu]
//插入元素的位置必须在 [0, list.length],否则报错IndexOutOfBoundsException
list.add(3, "wangwu"); //java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
list.add(-1, "wangwu"); //java.lang.IndexOutOfBoundsException: Index: -1, Size: 2
System.out.println(list);
(3)删除