Java学习笔记22
Java集合类是一种特别有用的工具类,可以用于存储数量不等的多个对象,并可以实现常用的数据结构,如:栈、
队列等。除此之外,Java集合类还可用于保存具有映射关系的关联数组。Java集合大致可分为Set、List和Map三种
状态,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map代表具有映射关系的集合。
Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又
包含了一些子接口或实现类。
如下图所示是Collection接口、子接口及其实现类的继承树:
关于Collection接口的定义:
Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许
有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接
实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方
操作这些 collection。
包 (bag) 或多集合 (multiset)(可能包含重复元素的无序 collection)应该直接实现此接口。
所有通用的 Collection 实现类(通常通过它的一个子接口间接实现 Collection)应该提供两个“标准”构造方法:一个
是 void(无参数)构造方法,用于创建空 collection;另一个是带有 Collection 类型单参数的构造方法,用于创建一
个具有与其参数相同元素新的 collection。实际上,后者允许用户复制任何 collection,以生成所需实现类型的一个等
效 collection。尽管无法强制执行此约定(因为接口不能包含构造方法),但是 Java 平台库中所有通用的Collection
实现都遵从它。
此接口中包含的“破坏性”方法,是指可修改其所操作的 collection 的那些方法,如果此 collection 不支持该操作,则
指定这些方法抛出 UnsupportedOperationException。如果是这样,那么在调用对该 collection 无效时,这些方法可
能,但并不一定抛出 UnsupportedOperationException。例如,如果要添加的 collection 为空且不可修改,则对该
collection 调用
addAll(Collection)
方法时,可能但并不一定抛出异常。
一些 collection 实现对它们可能包含的元素有所限制。例如,某些实现禁止 null 元素,而某些实现则对元素的类型有
限制。试图添加不合格的元素将抛出一个未经检查的异常,通常是 NullPointerException 或ClassCastException。试
图查询是否存在不合格的元素可能抛出一个异常,或者只是简单地返回 false;某些实现将表现出前一种行为,而某
些实现则表现后一种。较为常见的是,试图对某个不合格的元素执行操作且该操作的完成不会导致将不合格的元素
插入 collection 中,将可能抛出一个异常,也可能操作成功,这取决于实现本身。这样的异常在此接口的规范中标记
为“可选”。
由每个 collection 来确定其自身的同步策略。在没有实现的强烈保证的情况下,调用由另一进程正在更改的
collection 的方法可能会出现不确定行为;这包括直接调用,将 collection 传递给可能执行调用的方法,以及使用现
有迭代器检查 collection。
Collections Framework 接口中的很多方法是根据
equals
方法定义的。例如,contains(Object o)
方法的规范声
明:“当且仅当此 collection 包含至少一个满足 (o==null ? e==null :o.equals(e)) 的元素e 时,返回 true。”不 应将此
规范理解为它暗指调用具有非空参数 o 的 Collection.contains 方法会导致为任意的e 元素调用 o.equals(e) 方法。可
随意对各种实现执行优化,只要避免调用 equals 即可,例如,通过首先比较两个元素的哈希码。(Object.hashCode()
规范保证哈希码不相等的两个对象不会相等)。较为常见的是,各种 Collections Framework 接口的实现可随意利用
底层
Object
方法的指定行为,而不管实现程序认为它是否合适。
以下是Collection接口中定义的方法:
1、
int size();
返回此 collection 中的元素数。如果此 collection 包含的元素大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE。
2、
boolean isEmpty();
如果此 collection 不包含元素,则返回 true。
3、
boolean contains(Object o);
如果此 collection 包含指定的元素,则返回 true。更确切地讲,当且仅当此 collection 至少包含一个满足
(o==null ? e==null : o.equals(e)) 的元素
e 时,返回 true。 如果此 collection 包含指定的元素,则返回true
4、
Iterator<E> iterator();
返回在此 collection 的元素上进行迭代的迭代器。关于元素返回的顺序没有任何保证(除非此 collection 是某个能提
供保证顺序的类实例)。返回在此 collection 的元素上进行迭代的 Iterator。
5、
Object[] toArray();
返回包含此 collection 中所有元素的数组。如果 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法
必须以相同的顺序返回这些元素。
返回的数组将是“安全的”,因为此 collection 并不维护对返回数组的任何引用。(换句话说,即使 collection 受到数
组的支持,此方法也必须分配一个新的数组)。因此,调用者可以随意修改返回的数组。
此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回包含此 collection 中所有元素的数组
转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/43956047 情绪控_
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。