List接口继承自Collection接口,包含Collection接口的所有方法,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。
List集合特有的方法
增
- void add(int index,E element)
- boolean addAll(int index,Collection< ? extends E> c)
删
- E remove(int index)
改
- E set(int index,E element)
查
- E get(int index)
- int indexOf(Object o)
- int lastIndexOf(Object o)
- List subList(int fromIndex,int toIndex)
- ListIterator listIterator()
- ListIterator listIterator(int index)
1.void add(int index,Object element):在指定位置插入元素
package com.first;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
List list=new ArrayList();
list.add("a");
list.add("c");
list.add("d");
list.add(1, "e");
System.out.println(list);
}
}
运行结果为
[a, e, c, d]
2.Object remove(index):删除索引处的元素
package com.first;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
List list=new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Object obj=list.remove(1);
System.out.println(obj);
System.out.println(list);
}
}
运行结果为
b
[a, c, d]
另外删除的时候不会自动装箱,只会把111当做索引。
package com.first;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
List list=new ArrayList();
list.add(111);
list.add(222);
list.add(333);
Object obj=list.remove(111);
System.out.println(obj);
System.out.println(list);
}
}
这时候会报索引越界异常。
如果想删除111这个元素,可以手动装箱Object obj=list.remove(new Integer(111));
3.Object get(int index):返回集合索引index处的元素
package com.first;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
List list=new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Object obj=list.get(1);
System.out.println(obj);
}
}
运行结果为
b
通过索引遍历List集合
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
4.Object set(int index,Object element):将索引index处元素替换成element对象,并将替换后的元素返回。
package com.first;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Object obj = list.set(1, "a");
System.out.println(obj);
System.out.println(list);
}
}
运行结果为
b
[a, a, c, d]
5.ListIterator listIterator():返回在该集合的元素上进行迭代的迭代器(ListIterator),用于遍历该集合所有元素。
ListIterator迭代器是Iterator的子类,在父类中增加了一些特有的方法。ListIterator属于list特有的迭代,不常用。
6.用for循环遍历
package com.first;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("b");
list.add("d");
for (int i = 0; i < list.size(); i++) {
if ("b".equals(list.get(i))) {
list.remove(i);
}
}
System.out.println(list);
}
}
运行结果为
[a, c, d]
当修改集合为
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
运行结果为
[a, b, c, d]
这里有个b没有被删除
当b之间没有挨着的时候
b之间挨着的时候
为了解决这个问题,代码改为
for (int i = 0; i < list.size(); i++) {
if ("b".equals(list.get(i))) {
list.remove(i--);
}
}