一,结构
java.util
接口 List<E>
所有超级接口:
Collection<E>, Iterable<E>
List 是Collection的子接口,包含了Collection的基本方法函数,这里就只介绍一些List专有的方法
list 即有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
二,专有方法
void add (int index, E element)
E remove(int index)
E get(int index)
E set(int index, E element)
1.void add (int index, E element)
在列表的指定位置插入指定元素(可选操作)。将当前处于该位置的元素(如果有的话)和所有后续元素向右移动(在其索引中加 1)。
2.E remove(int index)
移除列表中指定位置的元素(可选操作)。将所有的后续元素向左移动(将其索引减 1)。返回从列表中移除的元素。
3.E get(int index) 返回列表中指定位置的元素。
4.E set(int index, E element) 用指定元素替换列表中指定位置的元素
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add(1, "e"); //按照索引插入元素 index <= size 并且
index >= 0 都不会异常
//list.add(10, "2"); java.lang.IndexOutOfBoundsException,当存储时使用
//不存在的索引时,要考虑索引越界问题
System.out.println(list);
list.remove(1); //通过索引删除元素 返回删除的元素 注意: 删除时不会
//自动封箱,区别索引与封箱元素,避免混乱
list.remove("a"); //可以直接通过元素删除 删除成功返回true 失败 false
System.out.println(list.remove("d"));
System.out.println(list);
Object obj1 = list.get(1); //获取指定位置元素的值 存在索引越界问题
System.out.println(obj1);
//通过索引遍历List集合
for(int i =0; i < list.size(); i++) {
System.out.println(list.get(i));
}
list.set(1,"W"); //将指定位置元素修改
System.out.println(list);
}
三,遍历
向List集合中存储学生对象,通过size() 和 get() 方法结合使用遍历
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Student("张三",21));
list.add(new Student("李四",31));
list.add(new Student("王五",41));
list.add(new Student("赵六",31));
for(int i = 0; i < list.size(); i++) {
Student s = (Student) list.get(i); //向下转型
System.out.println(s.getAge() + " " + s.getName());
System.out.println(list.get(i));
}
}
四,并发修改错误
在使用iterator 迭代器进行遍历集合时同时使用collection - List 中add方法添加元素,就会发生并发修改错误,因为iterator迭代器在迭代开始时接收n个元素,遍历时元素变为n + 1 个就会发生混乱,造成并发修改错误
即java.util.ConcurrentModificationException
public static void main(String[] args) {
List list = new ArrayList(); //父类引用实现子类对象
list.add("world");
list.add("a");
list.add("c");
if(list.contains("world")) {
list.add("javaeej");
}
System.out.println(list);
Iterator it = list.iterator();
while(it.hasNext()) {
String str = (String) it.next();
//java.util.ConcurrentModificationException
if("world".equals(str)) {
// list.add("javaee"); //遍历的同时在增加元素,并发修改错误,因
//为iterator接收到a给元素,在遍历时添加会影响到
//iterator的遍历数,所以会产生并发修改错误
}
}
System.out.println(list);
ListIterator lit = list.listIterator();
while(lit.hasNext()) {
String str = (String) lit.next(); //向下转型
if("world".equals(str)) {
lit.add("javaee"); //遍历的同时仍然可以增加元素,元素添加在遍历索引后
}
}
System.out.println(list);
}