Java数据结构2——深入JCF
2024-09-30 02:05:59
Java集合框架(JCF)参考C++的STL实现的在日常Java开发工作很常用的数据结构容器,有技术追求的人除了要会简单使用JCF之外,也要知道其底层的实现机制,知道它是如何实现的,为什么这样实现。就好比司机开车一样,司机完全不知道变速箱的原理一样可以开车,但是除了问题就不知道怎么办,不会维修更不会造车。关于深入理解JAVA集合系列文章,有朋友已经总结的不错,记录一下:
- Java Collections Framework概览 对Java Collections Framework,以及Java语言特性做出基本介绍。
- Java ArrayList源码剖析 结合源码对ArrayList进行讲解。
- Java LinkedList源码剖析 结合源码对LinkedList进行讲解。
- Java ArrayDeque源码剖析 以AarryDeque为例讲解Stack和Queue。
- 史上最清晰的红黑树讲解(上)和史上最清晰的红黑树讲解(下) 结合源码对TreeSet和TreeMap进行讲解。
- Java HashSet和HashMap源码剖析 结合源码对HashSet和HashMap进行讲解。
- Java集合框架源码剖析:LinkedHashSet 和 LinkedHashMap 结合源码对LinkedHashSet和LinkedHashMap进行讲解。
- 深入理解Java PriorityQueue 结合源码对PriorityQueue进行讲解。
- 浅谈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
最新文章
- 【问题】关于Mapper not initialized的问题
- Android 通用流行框架
- Java集合与算法
- IIS 7 的 500 內部錯誤
- 数组的一个强大函数splice,[增,删,改]
- Bzoj2648 SJY摆棋子
- ACM/ICPC 之 数据结构-线段树思想(POJ2182,含O(n^2)插入式解法)
- 巧妙的实现 CSS 斜线(炫酷的小效果)
- white-space: nowrap
- mapreduce任务中Shuffle和排序的过程
- 【nodejs】 npm 注意事项
- struts2的@Result annotation 如何添加params
- android 编写动画
- dtp--eclipse的安装数据源管理的一个插件的安装方法
- word-wrap,word-break,text-wrap的区别
- poj 2975 Nim_最经典的Nim取石子
- 2的幂次方(power)
- redis数据库操作的C++简单封装
- Eclipse 添加 lib (导入 .jar 包)
- CDI Features(EL(SPEL),Decorator,Interceptor,Producer)
热门文章
- 微信小程序video
- CAD设置当前显示的光标(com接口VB语言)
- 什么是ACID
- 踪电子表格中的单元格(Spreadsheet Tracking, ACM/ICPC World Finals 1997, UVa512)
- Ubuntu 18.04 nvidia driver 390.48 安装 TensorFlow 1.12.0 和 PyTorch 1.0.0 详细教程
- C++ 语言总结
- 【数值计算方法】二分法求根的C++简单实现
- Linux之iptables(三、命令--->;单主机)
- RAID-独立磁盘冗余阵列
- max_element()与min_element()