在“集合框架”中有两种常规的List 实现:ArrayList 和LinkedList。使用两种List 实现的哪一种取决于用户的需要。如果要支持随机访问,而不必在除尾部的任何位置插入或除去元素,那么,ArrayList 提供了可选的集合。但如果要频繁地从列表的中间位置添加和除去元素,而只要顺序地访问列表元素,那么使用LinkedList 实现更好。
1.ArrayList 类
ArrayList 是最常用的List 实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能含有“空隙”,当数组大小不满足时需要增加存储空间,就要将已有数组数据复制到新的存储空间中。当从ArrayList 的中间位置插入或者删除元素时,需要对数组进行复制、移动,代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
ArrayList 的实质就是一个会自动增长的数组。它是用封装的数组来实现的List 接口,底层用数组实现。随着向ArrayList 中不断添加元素,其容量会自动增长。
创建一个ArrayList 类的实例,可以使用如下构造方法,见表6.8。
表6.8 ArrayList 类的构造方法
ArrayList 类的常用方法见表6.9。
表6.9 ArrayList 类的常用方法
ArrayList 类封装了一个动态再分配的Object[]数组。每个ArrayList 对象有一个容量。它表示存储列表中元素的数组的容量。当元素添加到ArrayList 时,它的容量在常量时间内自动增加。
如例6.2 演示ArrayList 的部分方法。
例6.2:
执行上面程序运行结果如下:
ArrayList 类的底层是由数组实现的,虽然查询快,但是增、删比较慢。在实际应用中,对于增删比较频繁,而查询比较少时,我们就需要使用LinkedList。(www.daowen.com)
2.LinkedList 类
LinkedList 类是List 接口的另一个重要实现类。它的底层是用双向循环链表来实现的,所以便于将新加入的对象插入指定位置。它查询效率低,但是增删效率很高,适用于增删比较频繁,查询次数少的元素集合管理。
创建一个LinkedList 类的实例,可以使用以下构造方法,见表6.10。
表6.10 LinkedList 类的构造方法
LinkedList 类添加了一些处理列表两端元素的方法,见表6.11。
表6.11 LinkedList 类的常用方法
使用这些方法,就可以轻松地把LinkedList 当作一个堆栈、队列或其他面向端点的数据结构,如例6.3 所示。
例6.3:简单的实现先进后出的堆栈类。
执行上面程序运行结果如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。