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集合框架|菜鸟教程

    • 相关阅读:
      POJ 3258 (NOIP2015 D2T1跳石头)
      POJ 3122 二分
      POJ 3104 二分
      POJ 1995 快速幂
      409. Longest Palindrome
      389. Find the Difference
      381. Insert Delete GetRandom O(1)
      380. Insert Delete GetRandom O(1)
      355. Design Twitter
      347. Top K Frequent Elements (sort map)
    • 原文地址:https://www.cnblogs.com/three-fighter/p/13052917.html
    Copyright © 2011-2022 走看看