一.List接口的概述
- List接口是Collection接口的子接口
- List集合是有序的集合,可以有重复元素
有序:元素的存储和取出是一致的
二.List集合的特有功能
添加功能
void add(int index,Object element)
:在指定位置添加指定的元素
import java.util.List;
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args) {
List l = new ArrayList();
l.add("hello");
l.add("world");
l.add("java");
l.add(1,"javaee");
System.out.println(l);
}
}
结果:
[hello, javaee, world, java]
获取功能
Object get(int index)
:获取指定位置的元素Object set(int index,object element)
:将指定位置的元素用element该元素替代,返回的是需要被替代的元素
import java.util.List;
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args) {
List l = new ArrayList();
l.add("hello");
l.add("world");
l.add("java");
System.out.println(l.get(1));
}
}
结果:
world
删除功能
Object remove(int index)
:删除指定位置的元素,返回的就是删除的元素
import java.util.List;
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args) {
List l = new ArrayList();
l.add("hello");
l.add("world");
l.add("java");
System.out.println(l.remove(1));
System.out.println(l);
}
}
结果:
world
[hello, java]
list的迭代器:ListIterator(列表迭代器)
ListIterator listIterator()
:列表迭代器boolean hasNext()
:表示正向遍历:是否有下一个可以迭代的元素Object next()
:获取下一个元素boolean hasPrevious()
:表示逆向遍历:是否有上一个可以迭代的元素
要想使用逆向遍历,必须先正向遍历,如果先逆向遍历,没意义,一般不这样使用Object previous()
:返回列表中的前一个元素
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Demo1 {
public static void main(String[] args) {
List l = new ArrayList();
l.add("hello");
l.add("world");
l.add("java");
ListIterator li = l.listIterator();
while(li.hasNext()){
String s = (String)li.next();
System.out.println(s);
}
while(li.hasPrevious()){
String s = (String)li.previous();
System.out.println(s);
}
}
}
结果:
hello
world
java
java
world
hello
三.综合练习
- 需求:给List存储字符串,判断如果这个字符串是”world”,则给集合中添加一个新的字符串”javaee”
注意:
java.util.ConcurrentModificationException:并发修改异常
产生并发修改异常的原因是什么:
使用迭代器遍历时,当我们给集合中添加了新的字符串,迭代器不知道集合中是否添加了一个新的元素,所以产生这个异常
解决:通过迭代器遍历,迭代器添加/通过集合遍历,集合添加
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Demo2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
ListIterator li = list.listIterator();
while(li.hasNext()){
String s = (String)li.next();
if(s.equals("world")){
li.add("javaee");
break;
}
}
System.out.println(list);
for(int x = 0 ; x < list.size() ; x ++){
String s = (String)list.get(x);
if(s.equals("world")){
list.add(x+1,"javaee");
break;
}
}
System.out.println(list);
}
}
结果:
[hello, world, javaee, java]
[hello, world, javaee, javaee, java]