007 Java集合浅析2

在本系列的上一篇教程中,我们已经分析过了Collection组的两个顶级接口Iterable和Collection,接下来我们来分析一下Collection接口的子类型。

首先,我们看一下List接口,该接口映射的是数据结构中非常基础和常用的列表类型。参看源码,发现该接口在Collection接口的基础上增加了一些列表都有的方法,部分源码如下:

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

E get(int index);

E set(int index, E element);

void add(int index, E element);

E remove(int index);

int indexOf(Object o);

int lastIndexOf(Object o);

ListIterator<E> listIterator();

ListIterator<E> listIterator(int index);

List<E> subList(int fromIndex, int toIndex);

}

针对此List接口,我们需要注意两点:一是该接口除了有返回通用Iterator接口的方法,还有返回特定迭代器接口ListIterator的方法。我们看一下ListIterator接口的源码:

public interface ListIterator<E> extends Iterator<E> {

boolean hasNext();

E next();

boolean hasPrevious();

E previous();

int nextIndex();

int previousIndex();

void remove();

void set(E e);

void add(E e);

}

可以看到ListIterator接口根据底层List的特点新增了向前遍历和其他修改和新增元素的方法,使得对于底层List的操作更加方便和高效;二是注意其中的subList()方法,该方法返回的子List是原始List的一个视图,所以对子List的修改会导致原始List修改,但是原始List进行修改会如何影响子List是不确定的。

其次,我们再看一下Collection接口下的另一个直接子类型Set接口,该接口对应的是基础数据结构中的集合类型。该接口并没有在Collection接口的基础上引入任何特性。部分Set接口的源码如下:

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

int size();

int hashCode();

}

最后,我们看看Collection接口下的另一个直接子类型Queue接口,该接口映射的是 基础数据结构中的队列类型。该接口在Collection接口的基础上添加了诸如poll()、peek()等队列特有方法,我们看一下其源码:

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

boolean add(E e);

boolean offer(E e);

E remove();

E poll();

E element();

E peek();

}

仔细观察以后,我们可以把这六个函数分成三组:add()和offer()都是用于添加元素,在集合是固定大小的情况,offer()性能更高;remove()和poll()都是用于删除首元素,区别在于当集合为空时是返回null还是抛出异常;element()和peek()函数都是用于返回首元素,区别在于当集合为空时是抛出异常还是返回nll。

经过以上的讨论和学习发现,Collection接口下的三个子类型开始出现特性,每种子类型在接口中加入了一些自己的方法。通过这次的分析,我们也可以学到一些设计接口和类继承层次的技巧。

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

                

时间: 2024-10-26 10:29:40

007 Java集合浅析2的相关文章

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

006 Java集合浅析1

在本系列教程的上一篇文章中,使用画图的方式展示了JDK中集合框架的基础体系结构.对于其中的Collection组来说,其顶级的接口是Iterable接口,估计熟悉设计模式的读者已经明白,此处该接口的引入就是为了实现迭代器模式. 关于什么是设计模式或者具体到什么是迭代器模式,本文不会展开,不了解的朋友,建议另找资料补充.关于设计模式的学习,我觉得必须给大家推荐一本书,名为<HeadFirst 设计模式>,该书以幽默风趣的方式,非常详细和深入地讲解了23种设计模式中的常见设计模式,同时,该书中的实

牛刀小试 - 浅析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)去快速查找到对应的唯一对象,而这个关键字可以是任意类型 与数组相比 数组的长度