购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 List接口及其实现类

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),指定数组的初始大小,并指定每次增加的容量。 2tW8AtErBKLZpYkNvVEgZN5FNhMgbwKf4lncpoqj4N0KZcBMN0XVvp+4h2S7BcMi

点击中间区域
呼出菜单
上一章
目录
下一章
×