list子类.docx

上传人:b****5 文档编号:6409982 上传时间:2023-01-06 格式:DOCX 页数:16 大小:28KB
下载 相关 举报
list子类.docx_第1页
第1页 / 共16页
list子类.docx_第2页
第2页 / 共16页
list子类.docx_第3页
第3页 / 共16页
list子类.docx_第4页
第4页 / 共16页
list子类.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

list子类.docx

《list子类.docx》由会员分享,可在线阅读,更多相关《list子类.docx(16页珍藏版)》请在冰豆网上搜索。

list子类.docx

list子类

13.3.2List接口的常用子类

13.3.2 List接口的常用子类

(1)

1.新的子类:

ArrayList

ArrayList是List子类,可以直接通过对象的多态性为List接口实例化。

此类的定义如下:

1.public class ArrayList extends AbstractList  

2.implements List, RandomAccess, Cloneable, Serializable 

从定义中可以发现ArrayList类继承了AbstractList类。

AbstractList类的定义如下:

1.public abstract class AbstractList  

2.extends AbstractCollection implements List 

此类实现了List接口,所以可以直接使用ArrayList为List接口实例化。

下面通过一些实例操作为读者讲解List接口中主要方法的使用。

(1)实例操作一:

向集合中增加元素

要想完成此类操作,可以直接使用Collection接口中定义的两个方法。

增加一个元素:

publicbooleanadd(Eo)。

增加一组元素:

publicbooleanaddAll(Collection

extendsE>c)。

也可以使用List扩充的add()方法在指定位置处增加元素。

在指定位置处添加元素:

publicvoidadd(intindex,Eelement)。

范例:

验证增加数据的操作

1.package org.lxh.demo13.listdemo; 

2.import java.util.ArrayList; 

3.import java.util.Collection; 

4.import java.util.List; 

5.public class ArrayListDemo01 { 

6.    public static void main(String[] args) { 

7.        List allList = null ;              

// 定义List对象 

8.        Collection allCollection = null ;

// 定义Collection对象 

9.        allList = new ArrayList(); 

10.        // 实例化List对象,只能是 

11.String类型 

12.        allCollection = new ArrayList(); 

13.// 实例化Collection,只能 

14.是String类型 

15.        allList.add("Hello"); 

16.                    // 从Collection继承的方法 

17.        allList.add(0, "World");                 

// 此方法为List扩充的方法 

18.        System.out.println(allList);             

// 输出集合中的内容 

19.        allCollection.add("LXH");                

// 增加数据 

20.        allCollection.add("");        

// 增加数据 

21.        allList.addAll(allCollection);         

// 从Collection继承的方 

22.法,增加一组对象 

23.        allList.addAll(0, allCollection);    

// 此方法是List自定义的, 

24.增加一组对象 

25.        System.out.println(allList); 

26.            // 输出对象,调用 

27.toString()方法 

28.    } 

29.} 

程序运行结果:

1.[World, Hello] 

2.[LXH, , World, Hello, MLDN, ] 

从程序的运行结果中可以发现,使用List中的add(intindex,Eelement)方法可以在集合中的指定位置增加元素,而其他的两个add()方法只是在集合的最后进行内容的追加。

 

 

13.3.2 List接口的常用子类

(2)

(2)实例操作二:

删除元素

在类集中提供了专门的删除元素的方法,Collection和List接口都分别定义了删除数据的方法。

Collection定义的方法

每次删除一个对象:

publicbooleanremove(Objecto)。

每次删除一组对象:

publicbooleanremoveAll(Collection

>c)。

List扩展的方法

删除指定位置的元素:

publicEremove(intindex)。

范例:

删除对象

1.package org.lxh.demo13.listdemo; 

2.import java.util.ArrayList; 

3.import java.util.List; 

4.public class ArrayListDemo02 { 

5.    public static void main(String[] args) { 

6.        List allList = null ;      

// 声明List对象 

7.        allList = new ArrayList(); 

8.// 实例化List对象,只能是String 

9.类型 

10.        allList.add("Hello"); 

11.            // 增加元素 

12.        allList.add(0, "World");           

// 此方法为List扩展的增加方法 

13.        allList.add("MLDN"); 

14.            // 增加元素 

15.        allList.add("");      

// 增加元素 

16.        allList.remove(0);                

// 删除指定位置的元素 

17.        allList.remove("Hello");         

// 删除指定内容的元素 

18.        System.out.println(allList); 

19.    // 输出对象,调用toString()方法 

20.    } 

21.} 

程序运行结果:

1.[MLDN, ] 

在集合中增加完数据后,可以通过下标或对象的方式直接对集合中的元素进行删除。

U提示:

关于使用remove(Objecto)方法删除对象的说明。

在集合中可以插入任意类型的对象,在本程序中是以String类的对象为例,所以在使用remove(Objecto)方法删除时可以直接删除;而对于自定义的类如果要通过此种方式删除,则必须在类中覆写Object类的equals()及hashCode()方法。

这两个方法的使用在随后的章节中将为读者介绍。

(3)实例操作三:

输出List中的内容

在Collection接口中定义了取得全部数据长度的方法size(),而在List接口中存在取得集合中指定位置元素的操作get(intindex),使用这两个方法即可输出集合中的全部内容。

范例:

输出全部元素

1.package org.lxh.demo13.listdemo; 

2.import java.util.ArrayList; 

3.import java.util.List; 

4.public class ArrayListDemo03 { 

5.    public static void main(String[] args) { 

6.        List allList = null ;           

// 定义List接口对象 

7.        allList = new ArrayList(); 

8.            // 实例化List对象,只 

9.能是String类型 

10.        allList.add("Hello"); 

11.                        // 增加元素 

12.        allList.add("Hello"); 

13.                        // 增加元素 

14.        allList.add(0, "World");               

// 增加元素 

15.        allList.add("MLDN"); 

16.                        // 增加元素 

17.        allList.add("");                

// 增加元素 

18.        System.out.print("由前向后输出:

");           

// 信息输出 

19.        for (int i = 0; i < allList.size(); i++) {   

// 循环输出集合内容 

20.            System.out.print(allList.get(i) + "、"); 

// 通过下标取得集合中 

21.的元素 

22.        } 

23.        System.out.print("\n由后向前输出:

"); 

24.        for (int i = allList.size() - 1; i >= 

0; i--) {// 循环输出集合内容 

25.            System.out.print(allList.get(i) + 

"、"); // 通过下标取得集合中 

26.的元素 

27.        } 

28.    } 

29.} 

程序运行结果:

1.由前向后输出:

World、Hello、Hello、MLDN、、 

2.由后向前输出:

、MLDN、Hello、Hello、World、 

从程序的运行结果中可以看出,在List集合中数据增加的顺序就是输出后的顺序,本身顺序不会发生改变。

(4)实例操作四:

将集合变为对象数组

在Collection中定义了toArray()方法,此方法可以将集合变为对象数组,但是由于在类集声明时已经通过泛型指定了集合中的元素类型,所以在接收时要使用泛型指定的类型。

范例:

将集合变为对象数组

1.package org.lxh.demo13.listdemo; 

2.import java.util.ArrayList; 

3.import java.util.List; 

4.public class ArrayListDemo04 { 

5.    public static void main(String[] args) { 

6.        List allList = null ;             

// 声明List对象 

7.        allList = new ArrayList(); 

8.        // 实例化List对象,只能是 

9.String类型 

10.        allList.add("Hello"); 

11.                    // 增加元素 

12.        allList.add(0, "World");                

// 增加元素 

13.        allList.add("MLDN"); 

14.                    // 增加元素 

15.        allList.add("");                 // 增加元素 

16.        String str[] = allList.toArray(new String[]

{}); // 指定的泛型类型 

17.        System.out.print("指定数组类型:

");       

// 信息输出 

18.        for (int i = 0; i < str.length; i++) {     

// 输出字符串数组中的内容 

19.            System.out.print(str[i] + "、");    

// 输出每一个元素 

20.        } 

21.        System.out.print("\n返回对象数组:

");     

// 信息输出 

22.        Object obj[] = allList.toArray();       

// 直接返回对象数组 

23.        for (int i = 0; i < obj.length; i++) {  

// 循环输出对象数组内容 

24.            String temp = (String) obj[i];      

// 每一个对象都是String类 

25.型实例 

26.            System.out.print(temp + "、");      

// 输出每一个元素 

27.        } 

28.    } 

29.} 

程序运行结果:

1.指定数组类型:

World、Hello、MLDN、、 

2.返回对象数组:

World、Hello、MLDN、、 

 

13.3.2 List接口的常用子类(3)

(5)实例操作五:

集合的其他相关操作

在List中还存在截取集合、查找元素位置、判断元素是否存在、集合是否为空等操作。

下面直接测试以上的操作。

范例:

测试其他操作

1.package org.lxh.demo13.listdemo; 

2.import java.util.ArrayList; 

3.import java.util.List; 

4.public class ArrayListDemo05 { 

5.    public static void main(String[] args) { 

6.        List allList = null ;           

// 声明List对象 

7.        allList = new ArrayList(); 

8.        // 实例化List对象,只能是 

9.String类型 

10.        System.out.println("集合操作前是否为空?

+ allList.isEmpty()); 

11.        allList.add("Hello"); 

12.                    // 增加元素 

13.        allList.add(0, "World");               

// 增加元素 

14.        allList.add("MLDN"); 

15.                    // 增加元素 

16.        allList.add("");              

// 增加元素 

17.        System.out.println(allList.contains("Hello") ?

  

18.                "\"Hello\"字符串存在!

":

 "\"Hello\"字符串不存在!

"); 

19.        List allSub = allList.subList(2, 

3);// 取出里面的部分集合 

20.        System.out.print("集合截取:

"); 

21.        for (int i = 0; i < allSub.size(); i++) {  

// 截取部分集合 

22.            System.out.print(allList.get(i) + "、"); 

23.        } 

24.        System.out.println("") ; 

25.        System.out.println("MLDN字符串的位置:

" + allList.indexOf("MLDN")); 

26.        System.out.println("集合操作后是否为空?

" + allList.isEmpty()); 

27.    } 

28.} 

程序运行结果:

1.集合操作前是否为空?

true 

2."Hello"字符串存在!

 

3.集合截取:

World、 

4.MLDN字符串的位置:

5.集合操作后是否为空?

false 

List集合在刚刚实例化之后因为还有为其增加内容,所以在使用isEmpty()方法时返回的结果是true,表示集合是空的,之后向集合中增加了4个元素,所以程序的最后再使用此方法判断时就返回false,表示集合中已经存在内容。

在程序中使用contains()方法判断集合中是否存在指定的元素,如果存在,则输出存在的信息;反之,输出不存在的信息。

在集合中也可以使用subList()方法取出指定的子集合。

2.挽救的子类:

Vector

在List接口中还有一个子类Vector,Vector类属于一个挽救的子类,从整个Java的集合发展历史来看,Vector算是一个元老级的类,在JDK1.0时就已经存在此类。

到了Java2(JDK1.2)之后重点强调了集合框架的概念,所以先后定义了很多的新接口(如List等),但是考虑到一大部分用户已经习惯了使用Vector类,所以Java的设计者就让Vector类多实现了一个List接口,这才将其保留下来。

但是因为其是List子类,所以Vector类的使用与之前的并没有太大的区别。

Vector类的定义如下:

1.public class Vector extends AbstractList 

2.implements List, RandomAccess, Cloneable, Serializable 

从Vector类的定义中可以发现,此类与ArrayList类一样也继承自AbstractList类。

范例:

Vector子类

1.import java.util.List; 

2.import java.util.Vector; 

3.public class VectorDemo01 { 

4.    public static void main(String[] args) { 

5.        List allList = null ;             

// 声明List对象 

6.        allList = new Vector(); 

7.            // 实例化List对象,只 

8.能是String类型 

9.        allList.add("Hello"); 

10.                        // 增加元素 

11.        allList.add(0, "World");                 

// 增加元素 

12.        allList.add("MLDN");                      

// 增加元素 

13.        allList.add("");               

// 增加元素 

14.        for (int i = 0; i < allList.size(); i++) {  

// 循环输出 

15.            System.out.print(allList.get(i) + "、"); 

// 通过get()取出每一 

16.个元素 

17.        } 

18.    } 

19.} 

程序运行结果:

1.World、Hello、MLDN、、 

如果直接使用的是List接口进行操作,则在运行结果上与ArrayList本身没有任何的区别,但是因为Vector类出现较早,所以也定义了许多在List接口中没有定义的方法,这些方法的功能与List类似。

例如,Vector类中的addElement(Eo)方法,是最早的向集合中增加元素的操作,但是在JDK1.2之后此方法的功能与List接口中add(Eo)方法是一致的。

范例:

使用旧的方法

1.package org.lxh.demo13.listdemo; 

2.import java.util.Vector; 

3.public class VectorDemo02 { 

4.    public static void main(String[] args) { 

5.        Vector allList = new Vector();

// 实例化Vector对象 

6.        allList.addElement("Hello"); 

7.                // 此方法为Vector自 

8.己定

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1