Java集合源码全面分析

 更新时间:2016年07月01日 11:52:59   投稿:jingxian  
下面小编就为大家带来一篇Java集合源码全面分析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

从上图中可以看出,集合类主要分为两大类: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集合源码全面分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅谈spring的重试机制无效@Retryable@EnableRetry

    浅谈spring的重试机制无效@Retryable@EnableRetry

    这篇文章主要介绍了浅谈spring的重试机制无效@Retryable@EnableRetry,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 举例说明Java设计模式编程中ISP接口隔离原则的使用

    举例说明Java设计模式编程中ISP接口隔离原则的使用

    这篇文章主要介绍了Java设计模式编程中ISP接口隔离原则的使用,接口隔离原则主张一个类对另外一个类的依赖性应当是建立在最小的接口上,需要的朋友可以参考下
    2016-02-02
  • Java中的final关键字详细介绍

    Java中的final关键字详细介绍

    这篇文章主要介绍了Java中的final关键字,有需要的朋友可以参考一下
    2014-01-01
  • SpringBoot整合Mybatis LocalDateTime 映射失效的解决

    SpringBoot整合Mybatis LocalDateTime 映射失效的解决

    这篇文章主要介绍了SpringBoot整合Mybatis LocalDateTime 映射失效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Spring基于注解的缓存声明深入探究

    Spring基于注解的缓存声明深入探究

    spring boot对缓存支持非常灵活,我们可以使用默认的EhCache,也可以整合第三方的框架,只需配置即可,下面这篇文章主要给大家介绍了关于SpringBoot学习之基于注解缓存的相关资料,需要的朋友可以参考下
    2022-08-08
  • Java数据结构之单链表详解

    Java数据结构之单链表详解

    在之前的学习中,我们主要了解了很多 Java 的 基本语法,但是在之后的 Java学习中,了解基础数据结构的知识非常重要,数据结构的思想可以帮助我们更加清晰明白的了解 Java 的解题思路等等.今天我们就来开始学习实现一个Java基础的单链表,需要的朋友可以参考下
    2021-05-05
  • 动态代理模拟实现aop的示例

    动态代理模拟实现aop的示例

    下面小编就为大家带来一篇动态代理模拟实现aop的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望对大家有所帮助
    2017-11-11
  • 如何使用ActiveMQ中间件方式发送邮件

    如何使用ActiveMQ中间件方式发送邮件

    这篇文章主要介绍了如何使用ActiveMQ中间件方式发送邮件的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java实现锁定某个变量的几种方式示例详解

    Java实现锁定某个变量的几种方式示例详解

    这篇文章主要为大家介绍了Java实现锁某个变量的几种方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Java连接MYSQL数据库的实现步骤

    Java连接MYSQL数据库的实现步骤

    以下的文章主要描述的是java连接MYSQL数据库的正确操作步骤,在此篇文章里我们主要是以实例列举的方式来引出其具体介绍
    2013-06-06

最新评论