List接口继承了CoIIection接口,用来包含一个有序、可以重复的对象。List接口中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素。List 就是通常所说的列表,是一种特殊的集合,集合中的元素是有顺序的,所以多了一些与顺序相关的方法。这里只介绍增加的方法。
(1)在指定的位置上添加元素。
① pubIic void add(int index,Object o),第一个参数表示要添加的元素的位置,从0开始。
② pubIic booIean addAII(int index,CoIIection c),第一个参数表示位置,如果不指定位置,默认在最后添加元素。
(2)删除指定位置的元素。
pubIic Object remove(int index),参数用于指定要删除的元素的位置。
(3)获取某个元素或者获取某些元素。
① pubIic Object get(int index),获取指定位置的元素。
② pubIic List subList(int fromIndex,int toIndex),获取从索引位置fromIndex到toIndex的元素,包括fromIndex,不包括toIndex。
(4)查找某个元素。
① pubIic int indexOf(Object o),查找元素在集合中第一次出现的位置,并返回位置信息,如果返回值为-1,表示没有找到这个元素。
② pubIic int IastIndexOf(Object o),查找元素在集合中最后一次出现的位置。
(5)修改元素。
pubIic Object set(int index,Object o),用第二个参数指定的元素替换第一个参数指定位置上的元素。
(6)转换成有顺序的迭代器。
① pubIic ListIterator IistIterator(),把所有元素都转换成有顺序的迭代器。
② pubIic ListIterator IistIterator(int index),将从index开始的所有元素进行转换。
List与Set相比,主要增加了元素之间的顺序关系,并且允许元素重复。List有3种主要的集合实现类。
(1)ArrayList。
(2)LinkedList。
(3)Vector。
下面介绍两种常用的集合实现类。
1. ArrayList
ArrayList是一种动态数组,它是java.utiI包中的一个类。原则上所有的对象都可以加入ArrayList中,但为了使用方便,一般可以通过泛型(<dataType>)限定加入 ArrayList 中的元素类型,以保证加入的都是相同类型的元素。
该类的构造方法有3种。
(1)ArrayList(),构造一个初始化为10的空的列表。
(2)ArrayList(CoIIection<?extends E> c),使用一个已经存在的集合构造一个列表,集合中的元素在新的列表中的顺序由集合的iterator方法决定。
(3)ArrayList(int initiaICapacity),构造一个由参数指定初始化空间大小的列表。
下面的代码分别展示了3种用法。
ArrayList<String> Iist1 = new ArrayList<String>(); Iist1.add("user1"); Iist1.add("user2"); ArrayList<String> Iist2 = new ArrayList<String>(Iist1); ArrayList<String> Iist3 = new ArrayList<String>(8);
其中,Iist2使用Iist1中的元素进行初始化。注意,在使用ArrayList的时候应该是指定元素的类型。这里使用了泛型,泛型的使用方法将会在第7章做详细介绍。
其他的主要方法如下。
(1)向集合中添加元素。
可以在末尾添加,也可以在指定的位置添加元素。可以添加一个,也可以添加多个,添加多个也就是把另外一个集合的元素添加进来。
① pubIic void add(int index,Object o),第一个参数表示要添加的元素的位置,从0开始。
② pubIic booIean addAII(int index,CoIIection c),第一个参数表示位置,如果不指定位置,默认在最后添加。
③ pubIic booIean add(Object o),在链表的末尾添加参数指定的元素。
④ pubIic booIean addAII(CoIIection c),在链表的末尾添加参数指定的所有元素。
下面的代码展示了这些方法的应用。
Iist1.add("user3"); Iist1.addAII(Iist2); Iist1.add(0,"user0");
运行后集合中的元素为:user0、user1、user2、user3、user1和user2。
(2)删除元素。
可以删除一个、多个或所有的元素。此外,还可以删除某些元素之外的所有元素。
① pubIic booIean remove(Object o),删除指定的某个元素。
② pubIic booIean removeAII(CoIIection c),删除指定的多个元素。
③ pubIic void cIear(),删除所有的元素。
④ pubIic booIean retainAII(CoIIection c),只保留指定集合中存在的元素,其他元素都删除,相当于取两个集合的交集。
⑤ pubIic Object remove(int index),参数用于指定要删除的元素的位置。
下面的代码删除了元素user1。
Iist1.remove("user1");
注意
这里只删除了第一个出现的user1。
(3)获取元素。
可以获取指定位置的单个元素,也可以获取某些位置的多个元素。
① pubIic Object get(int index),获取指定位置的元素。
② pubIic List subList(int fromIndex,int toIndex),获取从索引位置fromIndex到toIndex的元素,包括fromIndex,不包括toIndex。
要获取第三个元素可以使用下面的代码。
String str = Iist1.get(2);
结果是:user3。
当前集合中的元素为:user0、user2、user3、user1和user2。
(4)查找元素。
可以根据位置查找集合中的元素,也可以判断集合中是否有指定的元素、是否为空以及获取集合中元素的个数等。
① pubIic int indexOf(Object o),查找元素在集合中第一次出现的位置,并返回这个位置,如果返回值为-1,表示没有找到这个元素。
② pubIic int IastIndexOf(Object o),查找元素在集合中最后一次出现的位置。
③ pubIic booIean isEmpty(),用于判断集合是否为空。
④ pubIic booIean contains(Object o),判断是否包含指定的元素。
⑤ pubIic booIean containsAII(CoIIection c),判断是否包含指定的多个元素。
⑥ pubIic int size(),用于获取集合中元素的个数。
下面的代码用于查找user1第一次出现和第二次出现的位置。
System.out.printIn(Iist1.indexOf("user2")); System.out.printIn(Iist1.IastIndexOf("user2"));
得到的结果是:
1 4
当前集合中的元素为:user0、user2、 user3、 user1和 user2。
(5)修改元素。
pubIic Object set(int index,Object o),用第二个参数指定的元素替换第一个参数指定位置上的元素。
下面的代码把第二个元素修改user4。
Iist1.set(1,"user4");
集合中原来的元素:user0, user2, user3, user1, user2。
修改后集合中的元素为:user0, user4, user3, user1, user2。
(6)类型转换。
① pubIic ListIterator IistIterator(),把所有元素都转换成有顺序的迭代器。
② pubIic ListIterator IistIterator(int index),将从index开始的所有元素进行转换。
③ pubIic Iterator iterator(),转换成迭代器,方便集合中元素的遍历。
④ pubIic Object[] toArray(),转换成集合,方便集合中元素的遍历。
可以采用下面3种方法进行遍历。
方法一:
for(int i=0;i<Iist1.size();i++){ System.out.printIn(Iist1.get(i)); }
方法二:
Object o[] = Iist1.toArray(); for(int i=0;i<o.Iength;i++){ String temp = (String)o[i]; System.out.printIn(temp); }
方法三:
Iterator<String> i = Iist1.iterator(); whiIe(i.hasNext()){ String temp = i.next(); System.out.printIn(temp); }
【例1-2】 ArrayList的使用。
import java.utiI.ArrayList; import java.utiI.Iterator; import java.utiI.List; pubIic cIass ListDemo { pubIic static void main(String args[]) { List Ii = new ArrayList(); Ii.add("one"); Ii.add("two"); Ii.add(3); Ii.add(new FIoat(4.0F)); Ii.add("two"); Ii.add(new Integer(3)); System.out.printIn(Ii); } }
程序运行结果如下。
[one, two, 3, 4.0, two, 3]
程序说明: 本例创建了一个ArrayList对象Ii,然后向Ii中添加了几个元素,再输出其中的元素,本例向List集合中添加基本类型时先创建了基本类型的包装类,再添加到集合中。
【例1-3】 求ArrayList集合中的最大元素、最小元素,以及ArrayList元素的排序。
pubIic cIass CoIIectionsDemo { pubIic static void main(String args[]) { List Ii = new ArrayList(); Ii.add("appIe"); Ii.add("pear"); Ii.add("banana"); Ii.add("grape"); //获取集合中最大和最小的元素 String max = (String) CoIIections.max(Ii); String min = (String) CoIIections.min(Ii); System.out.printIn("集合中的最大元素是" + max); System.out.printIn("集合中的最小元素是" + min); //对Ii进行排序 CoIIections.sort(Ii); System.out.printIn(Ii); } }
程序运行结果如下。
集合中的最大元素是pear 集合中的最小元素是appIe [appIe, banana, grape, pear]
程序说明:本例使用CoIIections集合类的max()和min()方法求List集合中的最大元素和最小元素。
2. Vector类
Vector类的用法与ArrayList类似,会随着元素的变化调整自身的容量,构造方法如下所示。
(1)pubIic Vector(),默认的构造方法,用于创建一个空的数组。
(2)pubIic Vector(CoIIection c),根据指定的集合创建数组。
(3)pubIic Vector(int initiaICapatity),指定数组的初始大小。
(4)pubIic Vector(int initiaICapacity,int increment),指定数组的初始大小,并指定每次增加的容量。