zoukankan      html  css  js  c++  java
  • Java Review (二十三、集合-----概述)

    @

    目录


      Java 最初版本只为最常用的数据结构提供了很少的一组类:Vector、 Stack、Hashtable、BitSet 与 Enumeration 接口。

      随着 Java SE 1.2 的问世,设计人员感到是推出一组功能完善的数据结构的时机了。面对一大堆相互矛盾的设计策略,他们希望让类库规模小且易于学习, 而不希望像 C++ 的“ 标准模版库” (STL) 那样复杂,但却又希望能够吸收 STL 率先推出的“ 泛型算法” 所具有的优点。

      他们希望将传统的类融人新的框架中。与所有的集合类库设计者一样, 他们必须做出一些艰难的选择,于是,在整个设计过程中,他们做出了一些独具特色的设计决定。


      与现代的数据结构类库的常见情况一样, Java 集合类库也将接口( interface) 与 实现(implementation) 分离。

      Java 的集合类主要由两个接口派生而出 : Collection 和 Map , Collection 和 Map 是 Java 集合框架的根接口,这两个接口又包含了一些子接口或实现类 。

      图一:Java集合体系

      在这里插入图片描述

      图二所示是 Collection 接口、子接口及其实现类的继承树 :


      图二:Collection集合体系继承树

      在这里插入图片描述

      图二显示了 Collection 体系里的集合,其中粗线圈出的 Set 和 List 接口是 Collection 接口派生的两个子接口,它们分别代表了无序集合和有序集合; Queue 是 Java 提供的队列实现。

      图三所示是 Map 体系的继承树,所有的 Map 实现类用于保存具有映射关系的数据 。

      图三:Map集合体系继承树

      在这里插入图片描述

      图三显示了 Map 接口的众多实现类 ,这些实现类在功能、用 法上存在一定 的差异,但它们都有一个功能特征: Map保存的每项数据都是 key-value 对,也就是由 key 和 value 两个值组成 。

      就像成绩单:语文-79 , 数学-80 , 每项成绩都由两个值组成,即科目名和成绩 。 对于一张成绩表而言 ,科目通常不会重复,而成绩是可重复的,通常习惯根据科目来查阅成绩,而不会根据成绩来查阅科目 。

      Map 与此类似, Map里的 key 是不可重复的, key 用于标识集合里 的每项数据,如果需要查阅 Map中的数据时,总是根据 Map 的 key 来获取。

      对于图二和图 三中粗线标识的 4 个接口,可以把 Java 所有集合分成三大类 ,其中 :

      • Set 集合类似于一个罐子 ,把一个对象添加到 Set 集合时, Set 集合无法记住添加这个元素的顺序,所以 Set 里的元素不能重复(否则系统无法准确识别这个元素) ;
      • List 集合非常像一个数组 ,它可以记住每次添加元素的顺序 、且 List 的长度可变;
      • Map 集合也像一个罐子,只是它里面的每项数据都由两个值组成 。


      图四:三种集合示意图

      在这里插入图片描述






      参考:
      【1】:《Java核心技术 卷一》
      【2】:《疯狂Java讲义》
      【3】:Java集合框架|菜鸟教程

    • 相关阅读:
      网络流
      Link-Cut-Tree题集
      动态点分治
      斜率优化DP
      【Python学习之旅】---继承的方式完成包装(授权、item系列、str&repr、format 自定义格式方法)
      【Python学习之旅】---动态导入模块
      【Python学习之旅】---封装与反射(类的相关知识,面向对象三大特性:继承-多态-封装)
      【Python学习之旅】---多态(类的相关知识,面向对象三大特性:继承-多态-封装)
      【Python学习之旅】---多态(类的相关知识)
      【Python学习之旅】---继承(类的相关知识)
    • 原文地址:https://www.cnblogs.com/three-fighter/p/13052917.html
    Copyright © 2011-2022 走看看