List 是Collection接口的子接口,根据底层数据结构的不同,List接口又实现了很多的子类,其中在开发最常用的有三种,分别是:ArrayList,LinkedList,Vector。
List系列集合里面的元素是有序的,可以重复,因为该集合体系有索引。因而凡是可以操作脚标的方法都是List体系特有的方法,一些常用的方法如下:
1,添加
add(E e);//将指定元素添加到列表的尾部
add(index,element);//将指定的元素添加到列表中指定的位置
add(index,collection);//将一个集合内的全部元素添加到列表的指定位置
2,删除
remove(index);//删除列表中指定位置的元素
remove(fromIndex,toIndex);//删除列表中脚标从fromIndex到toIndex(不包括)之间的所有元素
3,修改
set(index,element)//用指定元素去替换列表上指定位置的元素
4,查询
get(index);//获取列表中指定位置的元素
subList(from,to);//获取脚标从from到to(不包含)的子集合
listIterator();//返回列表元素的列表迭代器
注意:迭代器(Iterator)是集合取出元素的方式,List有一种特殊的迭代器:ListIterator它是Iterator的子接口,可以通过调用listIterator()方法来获取对象,即:ListIterator li=al.listIterator();
由于在迭代时通过集合对象的方法操作集合中的元素会发生并发修改异常,所以在迭代时只能用迭代器中的方法操作元素,但是Iterator提供和方法是有限的,只能对元素进行判断,取出,删除等操作。要想对元素作出如添加,修改等操作,就需要使用其子接口ListIterator了。
添加,删除,修改,查询(迭代器除外)的例子:
import java.util.*;
public class ListDemo{
public static void show(Object obj){
System.out.println(obj);
}
public static void main(String[] args){
ArrayListe arr=new ArrayListe();
//添加元素
al.add("aaaaaa");
al.add("bbbbbb");
al.add("cccccc");
al.add("dddddd");
//打印原集合
show("原集合是:"+al);
//在指定位置添加元素
al.add(1,"ffffff");
//删除指定位置的元素
al.remove(2);
//修改元素
al.set(3,"kkkk");
//通过角标获取元素
show("get(3):"+al.get(3));
//获取所有元素
Iterator it= al.itrator();
while(it.hasNext()){
show("next:"+it.next());
}
//通过indexOf()获取对象的位置
show("index="+al.indexOf("aaaaaa"));
//获取子集合
List sub=al.subList(1,3);//包含1,不包含3
show("sub="+sub);
}
}
ListIterator迭代器的事例
import java.util.*;
public class ListDemo{
public static void show(Object obj){
System.out.println(obj);
}
public static void main(String[] args){
ArrayListe arr=new ArrayListe();
//添加元素
al.add("aaaaaa");
al.add("bbbbbb");
al.add("cccccc");
al.add("dddddd");
//打印原集合
show("原集合是:"+al);
ListIterator li=al.listIterator();
while(li.hasNext()){
Object obj=li.next();
if(obj.equals("cccccc");{
//li.add("wwwwww");
li.set("qqqqqq");
}
}
show(al);
}
}
Vector除具有以上方法以外,还有一个特殊的取出方式——枚举。枚举和迭代是一样的,但在JDK1.0时没有迭代,因此枚举用得非常广。在迭代出现后,因为枚举的名称以及方法的名称都过长,也就慢慢被迭代器取代了。
Vector的枚举事例:
import java.util.*;
class VectorDemo{
public static void main(String[] args){
Vector v=new Vector();
v.add("aaaaaa");
v.add("bbbbbb");
v.add("cccccc");
v.add("dddddd");
Enumeration en=v.elements();
while(en.hasMoreElements()){
System.out.println(en.nextElement());
}
}
}
LinkedList除具有上面的常用方法外,也具备一些特殊方法如:
addFirst();
addLast();
getFirst();
getLast();
//获取元素,但不删除元素
removeFirst();
removeLast();
//获取元素,但删除元素.如果集合中没有元素,会出现没有这个元素异常
事例如下:
import java.util.*;
public class LinkListDemo{
public static void main(String[] args){
LinkedList link=new LinkedList();
link.addFrist("bbbbbb");
link.addFirst("aaaaaa");
link.addLast("cccccc");
link.addLast("dddddd");
show(link);
show(link.getFirst());
show(link.getFirst());
show(link.getLast());
show(link.getLast());
show(link.removeFirst());
show(link.removeFirst());
//不用迭代的方法取出所有元素
while(!(link.isEmpty())){
show(link.removeLast());
}
}
public static void show(Object obj){
Sysem.out.println(obj);
}
}
在JDK1.6出现了替代方法。
//添加元素
offerFirst();
offerLast();
//获取元素,但不删除元素。如果集合中没有元素,会返回null。
peekFirst();
peekLast();
//获取元素,并删除元素。如果集合中没有元素,会返回null。
pollFirst();
pollLast();