Hi 大家好,我是清和二七,今天我们来聊聊《Java集合源码剖析-Java集合框架》

一.层次关系 

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)

Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
        Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。
        Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:
        (1).hasNext()是否还有下一个元素。
        (2).next()返回下一个元素。
        (3).remove()删除当前元素

二.整体介绍

从图中可以看出,集合类主要分为两大类:Collection和Map,下面将对他们整体介绍:
        Collection是List、Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主要又分为两大部分:List和Set。
        List接口通常表示一个列表(数组、队列、链表、栈等),其中的元素可以重复,常用实现类为ArrayList和LinkedList,另外还有不常用的Vector。另外,LinkedList还是实现了Queue接口,因此也可以作为队列使用。
       Set接口通常表示一个集合,其中的元素不允许重复(通过hashcode和equals函数保证),常用实现类有HashSet和TreeSet,HashSet是通过Map中的HashMap实现的,而TreeSet是通过Map中的TreeMap实现的。另外,TreeSet还实现了SortedSet接口,因此是有序的集合(集合中的元素要实现Comparable接口,并覆写Compartor函数才行)。
       可以看出,抽象类AbstractCollection、AbstractList和AbstractSet分别实现了Collection、List和Set接口,这就是在Java集合框架中用的很多的设计模式,用这些抽象类去实现接口,在抽象类中实现接口中的若干或全部方法,这样下面的一些类只需直接继承该抽象类,并实现自己需要的方法即可,而不用实现接口中的全部抽象方法。
       Map是一个映射接口,其中的每个元素都是一个key-value键值对,同样抽象类AbstractMap实现了Map接口中的大部分函数,TreeMap、HashMap、WeakHashMap等实现类都通过继承AbstractMap来实现,另外,不常用的HashTable直接实现了Map接口,它和Vector都是JDK1.0就引入的集合类。
      Iterator是遍历集合的迭代器(不能遍历Map,只用来遍历Collection),Collection的实现类都实现了iterator()函数,它返回一个Iterator对象,用来遍历集合,ListIterator则专门用来遍历List。而Enumeration则是JDK1.0时引入的,作用与Iterator相同,但它的功能比Iterator要少,它只能再Hashtable、Vector和Stack中使用。
      Arrays和Collections是用来操作数组、集合的两个工具类,例如在ArrayList和Vector中大量调用了Arrays.Copyof()方法,而Collections中有很多静态方法可以返回各集合类的synchronized版本,即线程安全的版本,当然了,如果要用线程安全的结合类,首选Concurrent并发包下的对应的集合类。

微信公众号:

图书推荐:数据结构与算法分析--Java语言描述

链接:https://pan.baidu.com/s/1p_T8frGCmD33z4UM2cbRDg

提取码:lprj

Inner Peace

Java集合源码剖析-Java集合框架相关推荐

  1. 【Java集合源码剖析】Hashtable源码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/36191279 Hashtable简介 Hashtable同样是基于哈希表实现的,同样每个元 ...

  2. 【Java集合源码剖析】HashMap源码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/36034955 您好,我正在参加CSDN博文大赛,如果您喜欢我的文章,希望您能帮我投一票,谢 ...

  3. 【Java集合源码剖析】TreeMap源码剖析

    2019独角兽企业重金招聘Python工程师标准>>> 前言 本文不打算延续前几篇的风格(对所有的源码加入注释),因为要理解透TreeMap的所有源码,对博主来说,确实需要耗费大量的 ...

  4. 转:【Java集合源码剖析】LinkedHashmap源码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/37867985   前言:有网友建议分析下LinkedHashMap的源码,于是花了一晚上时 ...

  5. Java HashMap源码剖析

    一.HashMap概述 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了不同步和允许使用 null 之外,HashMap  ...

  6. java.lang 源码剖析_java.lang.Void类源码解析

    在一次源码查看ThreadGroup的时候,看到一段代码,为以下: /* * @throws NullPointerException if the parent argument is {@code ...

  7. 【源码】Set集合源码剖析

    注:以下源码基于jdk1.7.0_11 Set集合其实是对Map集合的封装,Map集合存储的是键值对,那么我们将值隐藏,不向外界暴露,这样就形成了Set集合. 对应Map集合的两个很重要的实现Hash ...

  8. java音频源码,Android Java实时音频SDK示例源码下载 - 开发者中心 - ZEGO即构科技

    示例源码 本地下载 本地下载 GitHub下载 说明 示例代码运行指引 1 准备环境 在开始集成 ZEGO Express SDK 前,请确保开发环境满足以下要求(以下说明皆以 macOS 开发电脑为 ...

  9. (java毕业设计源码)基于java(springboot)简历系统源码成品

    基于java(springboot)简历系统 项目获取请看文章最底下官网 简历系统是基于java编程语言,mysql数据库,idea开发工具,springboot框架开发,本设计分为用户,管理员两个角 ...

  10. 【Java集合源码剖析】Java集合框架

    2019独角兽企业重金招聘Python工程师标准>>> Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组.链表.栈.队列.集合.哈希表等.学习Java集 ...

最新文章

  1. Nature:拟南芥微生物组功能研究0概述
  2. Pycharm出现out of memory 的终极解决方法
  3. 害怕抑郁症?该系统通过日常交流就能判断你是否有病
  4. TeamTNT通过模仿WatchDog团伙来掩盖其加密劫持足迹
  5. 全球及中国装饰花盆行业消费规模与投资商机研究报告2022版
  6. 单页面axios_Axios封装之取消重复请求和接口缓存
  7. linux中find查找命令的mtime参数使用方法说明
  8. 腾讯2020校园招聘---假期
  9. 小学有学计算机课程,如何进行小学计算机课程有效教学.doc
  10. 不与最大数相同的数字之和(信息学奥赛一本通-T1113)
  11. 【Clickhouse】Too many partitions for single INSERT block (more than 100)
  12. intel x520网卡驱动_手工编译linux桌面内核(二)——硬件驱动的配置 下篇
  13. 数据库开发文档记录方法
  14. leetcode [59] 螺旋矩阵 II / Spiral Matrix II,面试常考题 模拟螺旋过程
  15. php 定时微博代码,8款主流定时微博工具
  16. grafana快速搭建数据平台
  17. 单片机的ISP是什么
  18. 揭秘“菲住布渴”中运用的黑科技:除了check in、坐电梯、开门...全部刷脸之外,还有什么?...
  19. 概率图几种模型的简介和比较
  20. 拖动滑块验证--vue实现

热门文章

  1. java查找算法:二分查找(两种方式)
  2. 我与希赛PMP的不解之缘
  3. C语言高版本vs编译器scanf_s等报错原因方法
  4. java ic卡读写_使用Java驱动ACR122U对IC卡进行读写,总结
  5. 联想拯救者y7000p 2021安装Ubuntu18.04记录
  6. MVC三层架构详细图
  7. 凸二次规划的解法(旋转算法)
  8. 人人都是产品经理面试题
  9. linux系统下安装flash player插件下载安装,Linux16.0.4下安装Adobe Flash Player插件(Firefox)...
  10. 微星小飞机怎么超频?