欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java集合源码全面分析

程序员文章站 2024-03-13 09:26:53
java集合工具包位于java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习java集合框架下大致可以分为如下五个部分:list列表...

java集合工具包位于java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习java集合框架下大致可以分为如下五个部分:list列表、set集合、map映射、迭代器(iterator、enumeration)、工具类(arrays、collections)。

Java集合源码全面分析

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