0

0

JAVA编程思想---11.5 List,11.6迭代器

高洛峰

高洛峰

发布时间:2016-10-17 09:12:52

|

1946人浏览过

|

来源于php中文网

原创

collection类的层次结构图(来源与网络)如下所示:

1.png

接口:Iterator

public interface Iterable

Iterable接口作为超级接口,此接口中只有一个返回类型为Iterable 的iterator()方法,实现这个接口允许对象成为 "foreach" 语句的目标。


接口:Collection

public interface Collection extends Iterable

Collection层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素(如List,Queue),而另一些则不允许(如Set)。一些 collection 是有序的(如List,TreeSet,LinkedHashSet,TreeMap,LinkedHashMap),而另一些则是无序的(如HashSet,HashMap)。JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。 

立即学习Java免费学习笔记(深入)”;

 

接口:List

public interface List extends Collection

有序的 collection(也称为序列)。List接口在Collection接口的基础上添加了大量的方法,使得可以对列表中每个元素的插入或移除位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

List接口在 iterator、add、remove、equals 和 hashCode 方法的协定上加了一些其他约定,超过了 Collection 接口中指定的约定。

List 接口提供了对列表元素进行定位(索引)访问方法。列表(像 Java 数组一样)是基于 0 的。注意,这些操作可能在和某些实现(例如 LinkedList 类)的索引值成比例的时间内执行。因此,如果不知道具体实现,那么在列表元素上迭代(Iterator,或者foreach循环)通常优于用索引遍历(for循环)列表。

List 接口提供了特殊的迭代器,称为 ListIterator,除了允许 Iterator 接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。还提供了一个方法来获取从列表中指定位置开始的列表迭代器。

 

抽象类:AbastractCollection

public abstract class AbstractCollection extends Object implements Collection

此类提供 Collection 接口的骨干实现,实现了Collection接口的List、Set、Queue接口的实现类都可以继承此抽象类,以最大限度地减少了实现此接口所需的工作。

该接口实现了除size,iterator之外的其他Collection中的接口,并对add方法进行了限制。

Synthesys
Synthesys

Synthesys是一家领先的AI虚拟媒体平台,用户只需点击几下鼠标就可以制作专业的AI画外音和AI视频

下载

要实现一个不可修改的 collection,编程人员只需扩展此类,并提供 iterator 和 size 方法的实现。(iterator 方法返回的迭代器必须实现 hasNext 和next。)

要实现可修改的 collection,编程人员在扩展此类并提供iterator和size方法的实现外,还必须另外重写此类的 add 方法(否则,会抛出UnsupportedOperationException),iterator 方法返回的迭代器还必须另外实现其 remove 方法。

 

抽象类:AbastractList

public abstract class AbstractList extends AbstractCollection implements List

此类提供 List 接口的骨干实现,以最大限度地减少实现“随机访问”数据存储(如数组ArrayList)支持的该接口所需的工作(也就是实现了List接口扩展自Collection接口外的方法)。对于实现Collection接口中的方法,此类则是通过继承AbstractCollection抽象类来实现。此类没有实现的方法包括get(int index)和size(),并对set(int index, E element),add(int index,E element),remove(int index),add(E element)方法进行了限制。

对于连续的访问数据(如链表LinkedList),应优先使用 AbstractSequentialList,而不是此类。

要实现不可修改的列表,编程人员只需扩展此类,并提供 get(int) 和 size() 方法的实现。

要实现可修改的列表,编程人员必须另外重写 set(int, E) 方法(否则将抛出 UnsupportedOperationException)。如果列表为可变大小,则编程人员必须另外重写 add(int, E) 和 remove(int) 方法。 

 

类:ArrayList

public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable

ArrayList是List接口的大小可变的基于数组的实现。其底层采用数组的实现方式,所以具有良好的随机访问能力,但是对于在指定位置进行插入、删除等操作的效率不高。

每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小,没有指定ArrayList容量大小时,创建的实例默认容量为10。随着向 ArrayList 中不断添加元素,其容量也自动增长。

此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

14

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

6

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

20

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

106

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号