Java集合框架(JCF)参考C++的STL实现的在日常Java开发工作很常用的数据结构容器,有技术追求的人除了要会简单使用JCF之外,也要知道其底层的实现机制,知道它是如何实现的,为什么这样实现。就好比司机开车一样,司机完全不知道变速箱的原理一样可以开车,但是除了问题就不知道怎么办,不会维修更不会造车。关于深入理解JAVA集合系列文章,有朋友已经总结的不错,记录一下:

  1. Java Collections Framework概览 对Java Collections Framework,以及Java语言特性做出基本介绍。
  2. Java ArrayList源码剖析 结合源码对ArrayList进行讲解。
  3. Java LinkedList源码剖析 结合源码对LinkedList进行讲解。
  4. Java ArrayDeque源码剖析 以AarryDeque为例讲解StackQueue
  5. 史上最清晰的红黑树讲解(上)史上最清晰的红黑树讲解(下) 结合源码对TreeSetTreeMap进行讲解。
  6. Java HashSet和HashMap源码剖析 结合源码对HashSetHashMap进行讲解。
  7. Java集合框架源码剖析:LinkedHashSet 和 LinkedHashMap 结合源码对LinkedHashSetLinkedHashMap进行讲解。
  8. 深入理解Java PriorityQueue 结合源码对PriorityQueue进行讲解。
  9. 浅谈WeakHashMap 对WeakHashMap做出基本介绍。

Java容器能够容纳任何类型的对象,这一点表面上是通过泛型机制完成,Java泛型不是什么神奇的东西,只是编译器为我们提供的一个“语法糖”,泛型本身并不需要Java虚拟机的支持,只需要在编译阶段做一下简单的字符串替换即可。实质上Java的单继承机制才是保证这一特性的根本,因为所有的对象都是Object的子类,容器里只要能够存放Object对象就行了。
事实上,所有容器的内部存放的都是Object对象,泛型机制只是简化了编程,由编译器自动帮我们完成了强制类型转换而已。JDK 1.4以及之前版本不支持泛型,类型转换需要程序员显式完成。

为了规范容器的行为,统一设计,JCF定义了14种容器接口(collection interfaces),它们的关系如下图所示:

Map接口没有继承自Collection接口,因为Map表示的是关联式容器而不是集合。但Java为我们提供了从Map转换到Collection的方法,可以方便的将Map切换到集合视图。
上图中提供了Queue接口,却没有Stack,这是因为Stack的功能已被JDK 1.6引入的Deque取代。

实现

上述接口的通用实现见下表:

  Implementations
Hash Table Resizable Array Balanced Tree Linked List Hash Table + Linked List
Interfaces Set HashSet   TreeSet   LinkedHashSet
List   ArrayList   LinkedList  
Deque   ArrayDeque   LinkedList  
Map HashMap   TreeMap   LinkedHashMap

最新文章

  1. 【问题】关于Mapper not initialized的问题
  2. Android 通用流行框架
  3. Java集合与算法
  4. IIS 7 的 500 內部錯誤
  5. 数组的一个强大函数splice,[增,删,改]
  6. Bzoj2648 SJY摆棋子
  7. ACM/ICPC 之 数据结构-线段树思想(POJ2182,含O(n^2)插入式解法)
  8. 巧妙的实现 CSS 斜线(炫酷的小效果)
  9. white-space: nowrap
  10. mapreduce任务中Shuffle和排序的过程
  11. 【nodejs】 npm 注意事项
  12. struts2的@Result annotation 如何添加params
  13. android 编写动画
  14. dtp--eclipse的安装数据源管理的一个插件的安装方法
  15. word-wrap,word-break,text-wrap的区别
  16. poj 2975 Nim_最经典的Nim取石子
  17. 2的幂次方(power)
  18. redis数据库操作的C++简单封装
  19. Eclipse 添加 lib (导入 .jar 包)
  20. CDI Features(EL(SPEL),Decorator,Interceptor,Producer)

热门文章

  1. 微信小程序video
  2. CAD设置当前显示的光标(com接口VB语言)
  3. 什么是ACID
  4. 踪电子表格中的单元格(Spreadsheet Tracking, ACM/ICPC World Finals 1997, UVa512)
  5. Ubuntu 18.04 nvidia driver 390.48 安装 TensorFlow 1.12.0 和 PyTorch 1.0.0 详细教程
  6. C++ 语言总结
  7. 【数值计算方法】二分法求根的C++简单实现
  8. Linux之iptables(三、命令--->单主机)
  9. RAID-独立磁盘冗余阵列
  10. max_element()与min_element()