【JDK集合框架源码分析】-集合框架概述

导语:我们平时编程使用过很多的JDK工具类,但是学习不能知其然不知所以然,不看源码和了解底层实现机制的话经常会踩坑,对于越是底层的东西的了解程度可以反映一个程序员的编程水平,最近开始阅读JDK源码学习JDK设计的精髓,对于编程水平提升是非常具有价值的

集合框架简介

java的集合框架定义了对集合操作的方法,框架集合代表了对于集合的增删改查定义了一套完整的规范,使得使用具体操作与实现进行解耦。主要理念用一句话概括就是:提供一套“小而美”的API。API需要对程序员友好,增加新功能时能让程序员们快速上手。

下面我们先从整体上对于Java分析集合框架的结构:

  • 实线边框的是具体实现类,如ArrayListLinkedListHashMap等,折线边框的是抽象类,如AbstractCollectionAbstractListAbstractMap等,而点线边框的是接口,如Collection、Iterator、List等。
  • 所有的集合类都会实现iterator方法获得集合的Iterator对象,Iterator提供遍历集合元素的接口,主要包含hashNextnextremove三种方法。它的一个子接口LinkedIterator在它的基础上又添加了几种方法,分别是addprevioushasPreviousnextIndexpreviousIndexremoveset等方法。
  • 一般元素无序的集合类都实现Iterator接口,在遍历集合元素的时候,集合只能向后遍历,被遍历过的元素不会再被遍历到,如HashSetHashMap;而那些元素有序的集合类一般实现LinkedIterator接口,实现该接口的集合可以双向遍历,既可以通过previous方法访问前一个元素,也可以通过next方法访问后一个元素,如LinkedList
  • 集合类实现一般都会继承抽象类。抽象类一般都提供了许多基础方法的实现,在实现具体集合类时只需要重写或添加部分方法即可实现,减少了开发工作。

两大基类Collection与Map

集合类最上层的两个接口:

  • Collection表示一组纯数据
  • Map表示一组key-value对

Collections

List
List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许加入重复元素,
因为它可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引。
Set
Set表示不允许有重复元素的集合(A collection that contains no duplicate elements)
Queue
JDK1.5新增,与上面两个集合类主要是的区分在于Queue主要用于存储数据,而不是处理数据。(A collection designed for holding elements prior to processing.)
Queue用于模拟“队列”这种数据结构(先进先出 FIFO)。队列的头部保存着队列中存放时间最长的元素,队列的尾部保存着队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素,队列不允许随机访问队列中的元素。

Map

Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value。key和value都可以是任何引用类型的数据。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较结果总是返回false。 
关于Map,从代码复用的角度去理解,java是先实现了Map,然后通过包装了一个所有value都为null的Map就实现了Set集合。Map的这些实现类和子接口中key集的存储形式和Set集合完全相同(即key不能重复) 。Map的这些实现类和子接口中value集的存储形式和List非常类似(即value可以重复、根据索引来查找)。

从整体上了解了集合框架构成后,后续会在系列文章中分别对常用的结合源码进行深度剖析。

参考:http://www.importnew.com/16658.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值