006 Java集合浅析1

在本系列教程的上一篇文章中,使用画图的方式展示了JDK中集合框架的基础体系结构。对于其中的Collection组来说,其顶级的接口是Iterable接口,估计熟悉设计模式的读者已经明白,此处该接口的引入就是为了实现迭代器模式。

关于什么是设计模式或者具体到什么是迭代器模式,本文不会展开,不了解的朋友,建议另找资料补充。关于设计模式的学习,我觉得必须给大家推荐一本书,名为《HeadFirst 设计模式》,该书以幽默风趣的方式,非常详细和深入地讲解了23种设计模式中的常见设计模式,同时,该书中的实例代码使用的Java语言,让人倍感亲切。

如果由于各种原因导致暂时没有时间或者精力去学习和掌握迭代器模式,对于学习和吸收本文的知识也不会有太大的影响,大家可以先掌握使用方法和逻辑,背后的原理可以日后再补习。首先,我们来看一下JDK中Iterable接口的源码:

public interface Iterable<T> {

Iterator<T> iterator();

}

可以看到整个接口的内容非常简单,只有一个方法,该方法返回一个Iterator(迭代器)。看到这里我们就知道,所有实现了Iterable接口的类中都有一个可以返回迭代器的iterator()方法。

我们继续深入跟踪下去,发现Iterator也是一个接口,无论是否知道迭代器设计模式,背后的原理都是面向对象编程的三大特性(封装、继承、多态)。Iterator是一个非常简单的接口,源码如下:

public interface Iterator<E> {

boolean hasNext();

E next();

void remove();

}

源码面前无秘密,可以看到Iterator接口也只有三个方法:hasNext()方法用于判断是否还有下一个元素;next()方法用于获取下一个元素;remove()方法用于移除当前迭代位置处的某个元素。

此处,我必须感叹一下面向对象编程范式之强大和接口功能之灵活。首先,把遍历集合并且访问或者移除集合元素的一套操作使用迭代器Iterator接口包装起来。其次,以Iterable接口统一标识可以产生Iterator接口的集合类型。最后,只需集合类型去实现Iterable接口,并依据自身的特点生成具体的Iterator接口实现类。整个的思想和实现方式就是标准的迭代器模式,非常精妙。

在看完了Iterable接口的设计之后,我们再接着往下走。Iterable接口的直接子类是Collection接口,具体源码如下:

public interface Collection<E> extends Iterable<E> {

int size();

boolean isEmpty();

boolean contains(Object o);

Iterator<E> iterator();

Object[] toArray();

<T> T[] toArray(T[] a);

boolean add(E e);

boolean remove(Object o);

boolean containsAll(Collection<?> c);

boolean addAll(Collection<? extends E> c);

boolean removeAll(Collection<?> c);

boolean retainAll(Collection<?> c);

void clear();

boolean equals(Object o);

int hashCode();

}

从Collection接口含有的方法来看,该接口很好地模拟了一个集合的概念。该接口包含的方法不少,都是一些很直观的增加、移除、判断等方法。注意:由于Collection并没有继承Object从而获得equals(Object o)方法和hashCode(),而实际上Collection接口对应的集合概念又应该有这两个方法,所以这里自己引入这两个方法。

我们知道Collection接口的下面具有多种子类型,比如:

1)List

2)Set

3)Queue

虽然他们在表征的数据结构类型和数据的实际存储方式上具有很大的差异性,但他们都具有Collection接口的所有方法,必要时,可以通过向上转型来使用。

?最后,我们来总结一下:Collection组的接口数量和分支数量都比较多,Map组的接口数量较少,且是一条直线分支;Collection组的顶级接口是Iterable,Map组的顶级接口是Map。实际上,整个集合框架的完整体系结构远比这个复杂,但只要我们心中有这两个图,那么无论是吸收集合框架的后期教程还是实际工作中对数据结构的选择,都能做到手到擒来。

  本系列文档会在本人的微信公众号发布,欢迎大家扫码关注。

                

时间: 2024-10-17 11:53:28

006 Java集合浅析1的相关文章

java集合浅析

参照互联网 - 博客园 - http://www.blogjava.net/EvanLiu/archive/2007/11/12/159884.html. Question: 1.Q:大致讲解java集合的体系结构   A:List.Set.Map是这个集合体系中最主要的三个接口. 其中List和Set继承自Collection接口.      Set不允许元素重复.HashSet和TreeSet是两个主要的实现类.      List有序且允许元素重复.ArrayList.LinkedList

007 Java集合浅析2

在本系列的上一篇教程中,我们已经分析过了Collection组的两个顶级接口Iterable和Collection,接下来我们来分析一下Collection接口的子类型. 首先,我们看一下List接口,该接口映射的是数据结构中非常基础和常用的列表类型.参看源码,发现该接口在Collection接口的基础上增加了一些列表都有的方法,部分源码如下: public interface List<E> extends Collection<E> { E get(int index); E

牛刀小试 - 浅析Java集合框架的使用

基本概述 Java中的集合框架与数组类似,都是用于存储多个同一类型数据的容器. 但是对于数组的使用,会因为数组本身的特性会导致一些使用限制,例如: 数组要求在构造时,就必须确定数组的长度.所以如果想要存放的数据个数不确定,数组就无法使用. 于是促使了集合框架的诞生,与数组相比,集合框架最大特点在于: 集合框架下的容器类只能存放对象类型数据:而数组支持对基本类型数据的存放. 任何集合框架下的容器类,其长度都是可变的.所以不必担心其长度的指定问题. 集合框架下的不同容器了底层采用了不同的数据结构实现

深入java集合学习1-集合框架浅析

前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框架API是用来表示和操作集合的统一框架,它包含接口,实现类以及一些编程辅助算法.具体位于java.util包下. java集合框架UML图 从上面的UML图中可以看出,集合框架可以简单的分为四部分 Collection接口以及实现类 Map接口及其实现类 Iterator接口及实现类 辅助工具类  

JAVA基础——集合浅析

Java  集合 什么时候数组会显得力不从心,没法满足需求,需要集合类呢? 不知道具体数据长度 需要自动排序 存储键值对 当然,上面的情况不是绝对的,只是数组比较难满足.这时集合类(也可称为容器类)就显示了它强大的功能. 集合类的分类(图片转自http://biancheng.dnbcw.info/1000wen/359774.html) 上图中不包含Queue内容,部分Map的实现类未给出. 常见使用的有List.Set.Map及他们的实现类. List.Set.Map接口及各实现类的特性 接

深入浅析Java集合及LIst接口

一.集合的概念1.概述: 在学习集合前,先回忆一下数组的一个特征---数组有固定的长度,定义一个数组:int[] array = new int[];而针对数据长度可变的情况,产生了集合,java集合就是为了应对动态增长数据,在编译时无法知道具体的数据量而产生的.集合类又叫容器类. 2.集合和数组的区别 都是容器,数组时固定的长度,集合时可变的:数组存放的数据都是基本数据类型(四类八种)集合存放的数据都是引用数据类型(String.Integer.自定义数据类型)集合中对于基本数据类型会转换位引

Java学习入门-05 -集合浅析

集合数据结构体系框架 Collection接口是List/Set/Queue接口的父接口,其中定义的常用的操作方法有(注意此处笔记不完整,演示代码没有导包): 添加功能?i. boolean add(object obj)添加一个元素?ii. boolean addAll(Collection c)将集合c的全部元素添加到原集合元素后返回true?iii. 添加功能永远返回true 删除功能?i. void clear();移除所有元素?ii. boolean remove(Object o)移

深入Java集合学习系列:HashMap的实现原理

参考文献 引用文献:深入Java集合学习系列:HashMap的实现原理,大部分参考这篇博客,只对其中进行稍微修改 自己曾经写过的:Hashmap实现原理 1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的).此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 2. HashMap的数据结构: 在ja

Java—集合框架List

集合的概念 现实生活中:很多的事物凑在一起 数学中的集合:具有共同属性的事物的总和 Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象 集合的作用 在类的内部,对数据进行组织(针对作用与意义一样的属性,将他们放到一个集合中) 简单而快速的搜索大数量的条目 有的集合接口,提供了一系列排列有序的元素,并且可以在序列中快速的插入或删除有关元素 有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型 与数组相比 数组的长度