jdk源码学习之java.util

java.util包主要包含Collection接口和Map接口。Collection接口主要包含List和Set接口及其抽象类和实现类。Map接口主要包含Map接口的抽象类和实现类。

一、包的整体结构

util

1、Collection接口

整体结构分为三层:

  • 最上层为接口层,定义了规范,有List、Set接口。
  • 中间层为抽象类层,定义了接口的部分实现,添加了相应类的特殊实现,有AbstractCollection、AbstractList、AbstractSet。

  • 最下层为实现层,实现了不同数据结构和特性的集合类。

    2、Map接口

    Map接口的结构类似于Collection接口(jdk源码的很多实现都采用了抽象骨架类的实现方式)。三层分别为:

  • Map、SortedMap
  • AbstractMap
  • HashMap、TreeMap、HashTable

    二、共同点

1、Collection接口及其子接口包含以下最基本的行为:


  • add、addAll
  • remove、removeAll:移除另一个集合中包含的元素、clear:移除所有元素
  • contains、containsAll
  • isEmpty、size
  • toArray
  • iterator:继承Iterable
  • retainAll:取和另一个元素的交集,如果没有则变为空。

    2、Map接口包含以下基本行为(列出关键方法):


  • Entry:Map的一个元素,即键值对。以接口的形式在Map接口中存在
  • EntrySet:Entry的Set集合,方便迭代
  • values:所有制=值得集合

    三、不同点

    java.util包的不同实现主要基于不同的数据结构,也有为了满足线程安全和操作效率而提供了不同的实现。

    1、数据结构

  • 数组:数组是一个容器,里面包含了同一种数据类型的集合,每个元素都有一个下标,方便查找。Arraylist基于数组,查找快,增删慢。增删需要改变容量。
  • 链表:链表的每个元素都包含值和指针,双链表包含两个指针。Linkedlist基于链表。链表的增删快,只需要改变指针的指向即可实现。查找需要遍历。

    2、线程安全

  • 线程安全,但是效率低:一般实现是将需要共享的资源添加synchronize关键字实现多线程同步访问。Vector是线程安全的。