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

接口:Iterator<T>
public interface Iterable<T>

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


接口:Collection<T>
public interface Collection<E> extends Iterable<E>

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

接口:List<T>

public interface List<E> extends Collection<E>

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

List接口在 iteratoraddremoveequalshashCode 方法的协定上加了一些其他约定,超过了 Collection 接口中指定的约定。

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

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

抽象类:AbastractCollection<T>

public abstract class AbstractCollection<E> extends Object implements Collection<E>

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

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

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

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

抽象类:AbastractList<T>

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>

此类提供 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<T>

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable

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

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

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

JAVA编程思想(第四版)学习笔记----11.5 List,11.6迭代器的更多相关文章

  1. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十三)之Strings

    Immutable Strings Objects of the String class are immutable. If you examine the JDK documentation fo ...

  2. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(四)之Operators

    At the lowest level, data in Java is manipulated using operators Using Java Operators An operator ta ...

  3. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(三)之Everything Is an Object

    ---恢复内容开始--- Both C++ and Java are hybird languages. A hybird language allow multiple programming st ...

  4. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(二)之Introduction to Objects

    The genesis of the computer revolution was a machine. The genesis of out programming languages thus ...

  5. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十四)之Type Information

    Runtime type information (RTTI) allow you to discover and use type information while a program is ru ...

  6. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十二)之Error Handling with Exceptions

    The ideal time to catch an error is at compile time, before you even try to run the program. However ...

  7. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十一)之Holding Your Objects

    To solve the general programming problem, you need to create any number of objects, anytime, anywher ...

  8. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十)之Inner Classes

    The inner class is a valuable feature because it allows you to group classes that logically belong t ...

  9. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(九)之Interfaces

    Interfaces and abstract classes provide more structured way to separate interface from implementatio ...

  10. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(八)之Polymorphism

    Polymorphism is the third essential feature of an object-oriented programming language,after data ab ...

随机推荐

  1. ASP.NET MVC Model验证(五)

    ASP.NET MVC Model验证(五) 前言 上篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现, 然而在MVC框架中还给我们提供了其它 ...

  2. xamarin android,UWP 网络类型和IP地址

    App开发经常要判断网络连通情况,并判断网络类型,获取网络IP.xamarin中可以使用Dependencies提供各平台下的方法,现把各平台代码记录如下: using System; using S ...

  3. Eclipse 使用技巧

    1.Eclipse 格式化代码时不换行与自动换行 Eclipse 推荐的编码风格默认是80列换行.每次用Eclipse自带的Ctrl+shift+f格式化代码时,如果原来的一行代码大于80列,Ecli ...

  4. PHP_VERSION_ID是如何定义的

    PHP_VERSION_ID是一个整数,表示当前PHP的版本,从php5.2.7版本开始使用的,比如50207表示5.2.7.和PHP版本相关的宏定义在文件 phpsrcdir/main/php_ve ...

  5. Livecoding.tv2.5发布,增加“用户搜索引擎”功能,方便用户找到匹配的程序员

    近日,在Livecoding.tv最新发布的博客中,介绍了该平台2.5版的一系列新功能,其中的User Discovery Engine(用户搜索引擎)受到大家的欢迎.使用该引擎,可以很方便地查找在L ...

  6. Web缓存杂谈

    一.概述 缓存通俗点,就是将已经得到的‘东东’存放在一个相对于自己而言,尽可能近的地方,以便下次需要时,不会再二笔地跑到起始点(很远的地方)去获取,而是就近解决,从而缩短时间和节约金钱(坐车要钱嘛). ...

  7. 3. 解析 struts.xml 文件

    1. struts.xml 文件基本配置: 主要放在资源路径下,配置 sturts2相关的 Action , 拦截器等配置 <struts> <!-- 设置常量 --> < ...

  8. Bootstrap相关资料

    WEB项目中,使用Bootstrap较多.但是一些插件却比较确实,所以整理了一份Bootstrap相关插件的地址.基本满足日常WEB开发中插件需求.并且还挺好用的 bootstrap说明文档,有问题可 ...

  9. 手动制作微信h5分享活动页面

    现在网上有很多自动制作h5宣传页的网站,可以通过传图,点几下鼠标就可以制作一个集动画.生产二维码等各种功能于一身的h5微信宣传页.对于运营来讲,非常方便,没有技术门槛,不足之处就是只有特定的动画效果, ...

  10. isEmpty和isBlank的区别

    isEmpty  判断某字符串是否为空,为空的标准是 str==null或 str.length()==0 StringUtils.isEmpty(null) = true StringUtils.i ...