JDK_API剖析之java.util包

Posted 技术新高度

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK_API剖析之java.util包相关的知识,希望对你有一定的参考价值。

Java的实用工具类库java.util包。在这个包中,Java提供了一些实用的方法和数据结构。

一、接口

1、Collection<E>

  • 接口
  • 自1.2开始有
  • 继承Iterable<E>
  • Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 SetList)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

2、Comparator<T>

  • 接口
  • 自1.2开始有
  • 无父类
  • 强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sortArrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。

3、Deque<E>

  • 接口
  • 自1.6开始有
  • 继承Queue<E>
  • 一个线性 collection,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

4、Enumeration<E>

  • 接口
  • 自1.0开始有
  • 继承Queue<E>
  • 实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement 方法将返回一系列的连续元素。

    例如,要输出 Vector<E> v 的所有元素,可使用以下方法:

       for (Enumeration<E> e = v.elements(); e.hasMoreElements();)
           System.out.println(e.nextElement());

    这些方法主要通过向量的元素、哈希表的键以及哈希表中的值进行枚举。枚举也用于将输入流指定到 SequenceInputStream 中。

    注:此接口的功能与 Iterator 接口的功能是重复的。此外,Iterator 接口添加了一个可选的移除操作,并使用较短的方法名。新的实现应该优先考虑使用 Iterator 接口而不是 Enumeration 接口。

5、EventListener

  • 标记接口
  • 自1.1开始有
  • 无父
  • 所有事件侦听器接口必须扩展的标记接口。

  • 没有方法定义

6、Formattable

  • 接口
  • 自1.5开始有
  • 无父
  • Formattable 接口必须通过需要执行自定义格式化(使用 Formatter‘s‘ 转换说明符)的任何类来实现。此接口允许对格式化任意对象的基本控制。

7、Iterator<E>

  • 接口
  • 自1.2开始有
  • 无父
  • 对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:

    • 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
    • 方法名称得到了改进。

    此接口是 Java Collections Framework 的成员。

8、List<E>

  • 接口
  • 自1.2开始有
  • 继承Collection<E>
  • 有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

    与 set 不同,列表通常允许重复的元素。更确切地讲,列表通常允许满足 e1.equals(e2) 的元素对 e1e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。难免有人希望通过在用户尝试插入重复元素时抛出运行时异常的方法来禁止重复的列表,但我们希望这种用法越少越好。

    List 接口在 iteratoraddremoveequalshashCode 方法的协定上加了一些其他约定,超过了 Collection 接口中指定的约定。为方便起见,这里也包括了其他继承方法的声明。

    List 接口提供了 4 种对列表元素进行定位(索引)访问方法。列表(像 Java 数组一样)是基于 0 的。注意,这些操作可能在和某些实现(例如 LinkedList 类)的索引值成比例的时间内执行。因此,如果调用者不知道实现,那么在列表元素上迭代通常优于用索引遍历列表。

    List 接口提供了特殊的迭代器,称为 ListIterator,除了允许 Iterator 接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。还提供了一个方法来获取从列表中指定位置开始的列表迭代器。

    List 接口提供了两种搜索指定对象的方法。从性能的观点来看,应该小心使用这些方法。在很多实现中,它们将执行高开销的线性搜索。

    List 接口提供了两种在列表的任意位置高效插入和移除多个元素的方法。

    注意:尽管列表允许把自身作为元素包含在内,但建议要特别小心:在这样的列表上,equalshashCode 方法不再是定义良好的。

    某些列表实现对列表可能包含的元素有限制。例如,某些实现禁止 null 元素,而某些实现则对元素的类型有限制。试图添加不合格的元素会抛出未经检查的异常,通常是 NullPointerExceptionClassCastException。试图查询不合格的元素是否存在可能会抛出异常,也可能简单地返回 false;某些实现会采用前一种行为,而某些则采用后者。概括地说,试图对不合格元素执行操作时,如果完成该操作后不会导致在列表中插入不合格的元素,则该操作可能抛出一个异常,也可能成功,这取决于实现的选择。此接口的规范中将这样的异常标记为“可选”。

    此接口是 Java Collections Framework 的成员。

9、ListIterator<E>

  • 接口
  • 自1.2开始有
  • 继承Iterator<E>
  • 系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。长度为 n 的列表的迭代器有 n+1 个可能的指针位置,如下面的插入符举例说明:

                          Element(0)   Element(1)   Element(2)   ... Element(n-1)
     cursor positions:  ^            ^            ^            ^                  ^
    

    注意,remove()set(Object) 方法不是 根据光标位置定义的;它们是根据对调用 next()previous() 所返回的最后一个元素的操作定义的。

10、Map<K,V>

  • 接口
  • 自1.2开始有
  • 无父
  • 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

    此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口。

    Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。

11、Map.Entry<K,V>

  • 接口
  • 自1.2开始有
  • 继承Iterator<E>
  • 映射项(键-值对)。Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。获得映射项引用的唯一 方法是通过此 collection 视图的迭代器来实现。这些 Map.Entry 对象 在迭代期间有效;更确切地讲,如果在迭代器返回项之后修改了底层映射,则某些映射项的行为是不确定的,除了通过 setValue 在映射项上执行操作之外。

 

以上是关于JDK_API剖析之java.util包的主要内容,如果未能解决你的问题,请参考以下文章

JDK_API剖析之java.io包

Java集合之Collections 剖析

JDK_API关于时间的表达

Java源码之 java.util.concurrent 学习笔记01

java并发之Condition图解与原理剖析

java并发之Condition图解与原理剖析