[Java Collections Framework] 浅析java 集合框架(Collection Framework)(一) : 接口概述

我把java Collection 里面的所有类做了一张 UML 图(去掉了 aggregation 关系)

这里写图片描述

可以看到里面主要分了 4部分 :

  • Iterator
  • 辅助类 : Arrays, Collections
  • Collection ( List, Queue,Set)
  • Map

值得注意的是,Map 和Collection(以后无特别说明类均指以上4个部分中的一部分) 并没有继承和实现关系,只是说Map中有些类与Colletion 中类有Aggregatin(has a )的关系。这样设计是比较合理的,因为Collection 中都是容器(Container), 装东西的,我们用它的需求就是将Item放进去,而不需要管这个容器里的元素有什么关系,具体长什么样。但是Map中是键值对(K,V),我们用它的需求主要是描述 : Key-Value 的关系

我准备花两周左右的时间,完整解析 Collection Framework. 从源码看看他的设计。

这里我按照数据结构的底层实现方式分成了3类:

  • 线性,List,Queue
  • Set
  • Map

接口概述

根据oracle java tutorial, 的说法以及上面的UML图。
各个接口主要功能如下:

  • Collection : 整个Collection(List,Sert,Queue) 的根类,他提供每个容器最基本的接口(通用需求),Collection Framework 中没有对他具体实现的类。后面继承他的接口都是对它的扩充
  • List :序列,如果你用过Vector,Arraylist应该对他很熟。没什么特殊要求,就像一个数组一样装东西,能够用index按次序访问
  • Set :集合,顾名思义,类似数学上集合的定义不能有重复元素
  • Queue: 队列,除了基本的Collection操作之外提供了插入,删除,审视队头或者队尾元素的操作。通常是FIFO 队列,不过有一个除外,优先队列,这里按照 Comperator 的大小关系排好了次序。注意优先队列(PriorityQueue) 是Queue的一种具体实现,而Queue是一个接口描述的是他的功能需求。Deque,扩充了Queue,允许FIFO或者LIFO
  • Map: 键值对 Key-Value, 类似于HashTable,可以看做一个要求Key不能duplicate的Set。

关于类名字的一点思考

看顶部那张图可以发现,简单的一个单词 Queue,Deque,List,Set,都是接口描述功能需求,而不做具体实现。而UML叶子的具体实现类中前一个单词说明他的底层实现,后一个单词说明他的功能实现(接口实现)。需要注意的是,LinkedList,虽然它后缀是List其实它同时实现了Queue和Deque。

使用建议

  1. 使用的时候应该先想好你的功能需求,再想选用的具体实现,尽量用最少的接口(最通用的功能),作为声明。例如,要用一个List
List<Integer> list = new ArrayList<>();

猜你喜欢

转载自blog.csdn.net/Dylan_Frank/article/details/81205044