Java集合接口综述

集合总是需要迭代的,我们确实需要探察集合中的每一个元素,所以集合接口都无一例外的继承了Iterable<T>接口 ,而该接口的唯一方法 :

Iterator<T> iterator()
返回一个在一组 T 类型的元素上进行迭代的迭代器。

可以返回一个所有集合接口都继承了的Iteraor接口,如此集合框架的所有子类都可以迭代显示其元素!

例如下:集合的根接口Collection继承了Iterator接口:

public interface Collection<E> extends Iterable<E>  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 中,将可能抛出一个异常,也可能操作成功,这取决于实现本身。这样的异常在此接口的规范中标记为“可选”。

此接口是 Java Collections Framework 的成员。

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的父接口所返回的Iterator接口的意义:

public interface Iterator<E>

对集合进行迭代的迭代器。迭代器代替了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:迭代器允许调用方利用定义良好的语义在迭代期间从迭代器所指向的集合移除元素。 方法名称得到了改进。

时间: 2024-08-03 19:49:59

Java集合接口综述的相关文章

初学者必读:Java集合接口综述

初学|集合|接口 集合总是需要迭代的,我们确实需要探察集合中的每一个元素,所以集合接口都无一例外的继承了Iterable<T> 接口 ,而该接口的唯一方法 : Iterator<T> iterator()           返回一个在一组 T 类型的元素上进行迭代的迭代器. 可以返回一个所有集合接口都继承了的Iteraor接口,如此集合框架的所有子类都可以迭代显示其元素! 例如下:集合的根接口Collection继承了Iterator接口: public interface Co

Java集合框架综述

最近被陆陆续续问了几遍HashMap的实现,回答的不好,打算复习复习JDK中的集合框架,并尝试分析其源码,这么做一方面是这些类非常实用,掌握其实现能更好的优化我们的程序:另一方面是学习借鉴JDK是如何实现了这么一套优雅高效的类库,提升编程能力. 在介绍具体适合类之前,本篇文章对Java中的集合框架做一个大致描述,从一个高的角度俯视这个框架,了解了这个框架的一些理念与约定,会大大帮助后面分析某个具体类,让我们开始吧. 集合框架(collections framework) 首先要明确,集合代表了一

Java 集合教程

这些Java集合API 以一组类和接口提供给开发者,这样做容易处理object集合,除了它们的size能动态改变之外,感觉collection的工作原理有点像Array,并且它们拥有比Array更多的该机特性 相比于你自己去写一个集合类,不如用Java提供这些立即可以使用的集合类,这个教程将关注于Java集合,并且Java6中有很多特殊的Java集合. 这篇教程的目的是给你一个Java集合类的概述,因此不会挨个讨论每一个Java集合类的细节,这个概述会帮助你在阅读Java Doc 时会更轻松.

JAVA集合框架之List接口实现类

上一篇博客<JAVA集合框架之Set接口实现类>中介绍了Set接口的相关实现类,这一篇将介绍List接口的实现类. java.util.ArrayList< E > ArrayList有点类似于数组,相比较于数组而言,ArrayList可以动态的更改元素个数,相对于数组较为灵活. 每个 ArrayList 实例都有一个容量.该容量是指用来存储列表元素的数组的大小.它总是至少等于列表的大小.随着向 ArrayList 中不断添加元素,其容量也自动增长.并未指定增长策略的细节,因为这不

JAVA集合框架之Set接口实现类

在上一篇<JAVA集合框架>中为大家介绍了JAVA集合框架的基本组成,这一片开始将为大家介绍集合框架中常用的实现类的用法. java.util.HashSet< E > 此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用 null 元素.这是我们最常用的Set接口的实现类. 构造方法 方法名 说明 HashSet() 构造一个新的空 set,其底层 HashMap 实例的默认初始容量是

Java集合源码剖析:Java集合框架

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组.链表.栈.队列.集合.哈希表等.学习Java集合框架下大致可以分为如下五个部分:List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections). Java集合类的整体框架如下: 从上图中可以看出,集合类主要分为两大类:Collection和Map. Collection是List.Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主

Java Web Framework综述

web Java Web Framework综述0.简介本文介绍Java Web Framework的基本工作原理,和一些常用的开源Web MVC Framework(Struts, Web Work, Tapestry, Echo, JSF, Maverick, Spring MVC, Turbine, Cocoon, Barracuda). Web开发的最重要的基本功是HTTP:Java Web开发的最重要的基本功是Servlet Specification.HTTP和Servlet Spe

Java集合源码剖析:Hashtable源码剖析

Hashtable简介 Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中. Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克隆. HashTable源码剖析 Hashtable的源码的很多实现都与HashMap差不多,源码如下(加入了比较详细的注释):

Java集合源码剖析:HashMap源码剖析

HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap. HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆. HashMap源码剖析 HashMap的源码如下(加入了比较详细的注释): pac