zoukankan      html  css  js  c++  java
  • Java 集合框架图

    Java 中的集合是用于存储对象的工具类容器,它实现了常用的数据结构,提供了一系列公开的方法用于增加、删除、修改、查找和便利数据,降低日常开发成本。集合种类非常多,形成了一个比较经典的继承关系数,称为Java 集合框架图。

    框架图中主要分为两类:第一类是按照单个元素存储的 Collection ,在继承树中Set 和 List 都实现了 Collection 接口; 第二类是按照 Key-Value 存储的 Map 。

    在集合框架图中,红色代表接口,蓝色代表抽象类,绿色代表并发包中的类,灰色代表早期线程安全的类(基本已经弃用)。可以看到,与 Collection 相关的四条线分别是 List 、Queue 、Set、Map 它们的子类会映射到数据结构中的表,数,哈希等。

    List 集合

    List 集合是线性数据结构的主要实现,集合元素通常存在明确的上一个和下一个元素,也存在明确的第一个元素和最后一个元素。List 集合的遍历结果是稳定的。该体系最常用的是 ArryList 和 LinkedList 两个集合类。

    ArryList 是容量可以改变的非线程安全集合。内部实现使用数组进行存储,集合扩展时会创建更大的数组空间,把原有数据复制到新数组中。 ArrayList 支持对元素的快速随机访问,但是插入与删除时速度通常很慢,因为这个过程很有可能需要移动其他移动元素。

    LinkedList 的本质是双向链表。与 ArrayList 相比, LinkedList 的插入和删除速度更快,但是随机访问速度很慢。

    Queue 集合

    Queue(队列)是一种先进先出的数据结构,队列是一种特殊的线性表,它只允许在表的一端进行获取操作,在表的另一端进行插入操作。当队列中没有元素时,称为空队列。自从 BlockingQueue (阻塞队列)问世以来,队列的地位得到极大地提升,在各种高并发编程场景中,由于其本身FIFO的特点和阻塞操作的特点,经常被作为为Buffer(数据缓冲区)使用。

    Map 集合

    Map 集合是以 Key-Value 键值对作为存储元素实现的哈希结构,Key 按某种哈希函数计算后是唯一的,Value 则是可以重复的。Map 类提供三种 Collection 视图,在集合框架图中,Map 指向 Collection 的箭头仅表示两个类之间的依赖关系。可以使用 keySet()查看所有的 key ,使用 values() 查看所有的 Value ,使用 entrySet() 查看所有的键值的键值对。最早使用存储键值对的 Hashtable 因为性能瓶颈已经被淘汰,而如今广泛使用的 HashMap ,线程是不安全的。 ConcurrentHashMap 是线程安全的,在 JDK 8 中进行了锁的大幅度优化,体现出不错的性能。在多线程并发场景中,优先推荐使用 ConcurrentHashMap ,而不是 HashMap 。 ThreeMap 是 Key 有序的 Map 类集合。

    Set 集合

    Set 是不允许出现重复元素的集合类型。Set 体系最常用的是 Hashset 、 TreeSet 和 LinkedHashSet 三个集合类。 HashSet 从源码分析是使用 HashMap 来实现的,只是 Value 固定为一个静态对象,使用Key保证集合元素的唯一性,但它不保证集合元素的顺序。 TreeSet 也是如此,从源码分析是使用 TrreMap 来实现的,底层为树结构,在添加新元素到集合中时,按照某种比较规则将其插入合适的位置,保证插入后的集合仍然是有序的。LinkedHashSet 继承自 HashSet ,具有 HashSet 的优点,内部使用链表维护了元素插入顺序。

  • 相关阅读:
    ZOJ 2158 Truck History
    Knight Moves (zoj 1091 poj2243)BFS
    poj 1270 Following Orders
    poj 2935 Basic Wall Maze (BFS)
    Holedox Moving (zoj 1361 poj 1324)bfs
    ZOJ 1083 Frame Stacking
    zoj 2193 Window Pains
    hdu1412{A} + {B}
    hdu2031进制转换
    openjudge最长单词
  • 原文地址:https://www.cnblogs.com/dowhile/p/Java-ji-he-kuang-jia-tu.html
Copyright © 2011-2022 走看看