Java Language集合


介绍

java.util的集合框架为具有常规数组无法提供的功能的数据集提供了许多泛型类。

集合框架包含Collection<O>的接口,主要子接口List<O>Set<O> ,以及映射集合Map<K,V> 。集合是根接口,正由许多其他集合框架实现。

备注

集合是可以在其中存储其他对象集合的对象。您可以使用Generics指定存储在集合中的数据类型。

集合通常使用java.utiljava.util.concurrent命名空间。

Java SE 1.4

Java 1.4.2及更低版本不支持泛型。因此,您无法指定集合包含的类型参数。除了没有类型安全之外,您还必须使用强制转换来从集合中获取正确的类型。

除了Collection<E> ,还有多种主要类型的集合,其中一些具有子类型。

  • List<E>是有序的对象集合。它类似于数组,但没有定义大小限制。实现通常会在内部增大以容纳新元素。
  • Set<E>是一组不允许重复的对象。
    • SortedSet<E>Set<E> ,它还指定元素排序。
  • Map<K,V>是键/值对的集合。
    • SortedMap<K,V>Map<K,V> ,它还指定元素排序。
Java SE 5

Java 5添加了一个新的集合类型:

  • Queue<E>是要按特定顺序处理的元素的集合。该实现指定这是FIFO还是LIFO。这废弃了Stack类。
Java SE 6

Java 6增加了一些新的集合子类型。

  • NavigableSet<E>是一个内置特殊导航方法的Set<E>
  • NavigableMap<K,V>Map<K,V> ,内置了特殊的导航方法。
  • Deque<E>是一个可以从任何一端读取的Queue<E>

请注意,以上项目都是接口。要使用它们,您必须找到适当的实现类,例如ArrayListHashSetHashMapPriorityQueue

每种类型的集合都有多个具有不同性能指标和用例的实现。

请注意, Liskov替换原则适用于集合子类型。也就是说,可以将SortedSet<E>传递给期望Set<E>的函数。有关如何使用具有类继承的集合的更多信息,阅读泛型部分中的有界参数也很有用。

如果要创建自己的集合,可能更容易继承其中一个抽象类(例如AbstractList )而不是实现接口。

Java SE 1.2

在1.2之前,您必须使用以下类/接口:

  • Vector而不是ArrayList
  • Dictionary而不是Map 。请注意,Dictionary也是一个抽象类而不是一个接口。
  • Hashtable而不是HashMap

这些类已过时,不应在现代代码中使用。

集合 相关例子