- iterator的简要介绍
-
Collection的简要介绍
- 基本特性
-
方法
关于容器
java中有许多有用的容器,比如说Set,广泛使用的ArrayList,这些容器使用的非常广泛
所有这些容器都是直接或间接源于一个接口:Collection
(不是Collections)iterator与collection:容器的起源
容器是java的一个非常重要的组成部分,几乎处处都会用到。
iterator的简要介绍
java当中有两个与容器迭代有关的接口,iterable与iterator,这两个接口实现了容器中的迭代功能。从《java编程思想》p459中的容器继承关系图中可以看出:

Iterator是所有容器的基础。
可以这样来考虑:java中的容器,包括set,list,map等等,其最基本的属性就是可迭代,先实现了迭代的接口,然后才根据各自的功能进行补全。iterable
iterable顾名思义,就是表示实现了这个接口的类都是可迭代的,iterable的主要用处就是提供类型的iterator,以及使任何实现了这个接口的类都能够使用forEach语句进行迭代
iterable的官方文档如下:
https://docs.oracle.com/javase/9/docs/api/java/lang/Iterable.htmliterator
iterator就是容器的迭代器,容器对我们封装了内部实现,作为补偿,每种容器都可以通过其内部的迭代器进行迭代。
iterator的官方文档如下:
https://docs.oracle.com/javase/9/docs/api/java/util/Iterator.htmliterator接口中提供了四个方法,分别是:
default void forEachRemaining(consumer<? super E> action);
(我也不知道这个方法的具体含义)
以及
Boolean hasNext();
E next();
default void remove();这三个方法就是我们常用来对容器进行迭代的了。
其中hasNext() 就是判断是否还有剩余元素没有被迭代访问,而next()方法就是返回当前的迭代器所指向的位置的接下来一个元素的引用。
第三个方法remove()需要注意
这个方法是将next()所指向的元素移除,对每一个next()指向,只能调用一次这个方法关于remove方法
如果一个正在迭代中的collection通过除remove方法之外的途径被修改了,那么一个iterator的行为是未定义的,可能会产生许多匪夷所思的结果。除非子类覆盖了这个方法并给出了确定的行为。
同样的,如果在使用了forEachRemaining方法之后调用remove方法,其结果也是未定义的Collection的简要介绍
源代码中对collection的定义是这样的:
public interface Collection<E> extends Iterable<E>
iterator是容器的最基本最抽象的性质——可迭代
而collection则对其稍微具体地完善了一下:collection代表了一组可迭代的对象
在collection接口没有给出其它具体的要求,所以一个collection可以有各种不同的实现方式,比如说set与list就是两种不同的实现,能够分别满足不同的功能要求。
collection的官方文档如下:
https://docs.oracle.com/javase/9/docs/api/java/util/Collection.html基本特性
- 所有对collection的实现都必须至少包含两种构造方法:一种不包含参数,直接创建一个空的对象。而另一种则含有一个collection类型的参数,该构造方法创建一个对象,并将参数的collection内的对象全都拷贝进来。对于这一点,没有任何强制性的限定,如果要亲自写一个新的collection的话,要不要实现这两种构造器全看程序员的心情
- collection中包含可选操作,具体描述可以参考《java编程思想》-17.4-可选操作,简要来说,就是在对collection的implements中,可以不用实现所有的方法,比如说remove,是可以不要的,如果不嫌麻烦的话
- collection的implement有时候会对其内部的元素进行限定,比如说不能为null,或者不能含有重复元素
方法
虽然java没有对collection接口的具体形式作出任何限制,但是通过接口里面的一大堆方法,可以知道一个collection所至少需要具备的功能:
(只列举了一部分)- int size() 返回collection中的元素个数
- boolean isEmpty() 是否为空
- boolean contains(Object o) 是否包含o对象
- boolean containsAll(Collection<?> c) 是否包含c collection中的所有对象
- Iterator iterator() 返回为该collection量身定制的迭代器
- Object[] toArray() 将collection转化为一个对象的数组
- boolean add(E e) 添加一个e元素
- boolean addAll(Collection<? Extends E> c) 添加一堆元素
- boolean remove(Object o) 删除一个o对象
- boolean removeAll(Collection<?> c) 删除一堆元素
- void clear() 清空,让我们从头开始
- boolean equals(Object o) 关于等价的判断
- int hashCode() 返回哈希值
相关文章
- 06-30各种容器与服务器的区别与联系:Servlet容器、WEB容器、Java EE容器、应用服务器、WEB服务器、Java EE服务器
- 06-30java – Tomcat和其他容器中的数据源和连接池与JNDI有什么关系?
- 06-30java中的排序--排序容器_TreeSet与TreeMap
- 06-30java-什么是紧凑的,可嵌入的Servlet容器,适合与Vaadin一起使用?
- 06-30Java集合容器的深度理解
- 06-30Java入门记(四):容器关系的梳理(上)——Collection
- 06-30从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射
- 06-30Java EE中的容器和注入分析,历史与未来
- 06-30Java ,单实例 多线程 ,web容器,servlet与struts1-2.x系列,线程安全的解决
- 06-30Java容器类接口:Iterator,Collection,Map