Java Collections框架教程

时间:2020-01-09 10:34:59  来源:igfitidea点击:

Java Collections框架是Java编程语言中的重要API。在任何Java应用程序中,如果必须存储对象,那么我们肯定会使用Java集合中定义的数据结构之一。该Java Collections教程概述了Java Collections框架。构成集合框架和Java集合层次结构的接口和类。

什么是Java Collections框架

集合可以定义为可以将多个元素存储到单个容器中的容器。 Java中的Collections框架提供了一个统一的体系结构,用于定义可以存储,检索和操作元素组的此类容器类。

Java Collections框架包含以下内容

  • 接口– Java集合中的接口是代表集合的抽象数据类型。这些接口为集合提供了通用的结构,然后可以对其进行实现以提供专门的实现。例如,java.util.Collection是集合层次结构中的根接口,用于定义集合的方法,并且该接口的实现(例如ArrayList或者HashSet)提供了专用的数据结构。
  • 实现-实现类是集合接口的具体实现。这些是可重用的数据结构,我们可以根据需要使用它们。例如,如果要存储可以使用索引访问的元素,则可以使用ArrayList;如果要确保仅存储唯一的元素,则可以使用HashSet。
  • 算法-这些是对集合类执行有用计算的方法。这些方法的设计方式是可以在不同的收集类上使用相同的方法。因此,这些算法提供了一些通用功能,适用于所有集合,例如搜索,排序和比较元素。算法在java.util.Collections类中定义为静态方法。

Java集合中的接口

在Java Collections框架中,有几个核心接口是Java Collections Framework的基础。从更通用的接口到专用的接口,这些接口以不断发展的风格进行设计。下表描述了核心收集接口

  • 集合接口–此接口是所有集合实现的集合层次结构的根。尽管不是由任何类直接实现,但Collection接口由诸如List和Set的更具体的子接口扩展,而这些子接口又由类实现。
  • 列表接口–扩展集合接口,并为可以包含重复元素的有序集合(其中元素按顺序存储)提供行为。除了继承Collection接口的方法之外,List接口还包括一些操作,以便可以使用索引(获取,设置,添加,删除方法)访问元素,还可以返回其索引(indexOf,lastIndexOf方法)来搜索元素。
  • Set接口–扩展Collection接口,并为不能包含重复元素的集合提供行为。
  • 队列接口–扩展集合接口并提供集合的行为,其中队列的头是通过调用remove或者poll删除的元素。
  • SortedSet接口–扩展Set接口并提供已排序集合的行为。集合中的元素使用其自然顺序或者通过通常在排序集合创建时提供的比较器进行排序。
  • NavigableSet接口-扩展SortedSet并添加报告给定搜索目标最匹配项的导航方法。方法lower,floor,天花板和higher返回元素分别小于,小于或者等于,大于或者等于和大于给定元素,如果没有此类元素,则返回null。
  • Deque接口-扩展队列并支持两端的元素插入和删除。

地图界面

  • Map接口– Map接口为存储(键,值)对的集合提供行为。请注意,尽管Map是Java Collections框架的一部分,但它并未扩展Collection接口。我们也不能直接迭代Map,要迭代Map,我们必须先获取Map的Collection视图,然后对其进行迭代。
  • SortedMap接口–扩展Map界面,并为按其键排序的地图提供行为。根据其键的自然顺序或者通常在排序的地图创建时提供的Comparator来对地图进行排序。
  • NavigableMap界面-扩展SortedMap并添加导航方法,该方法报告给定搜索目标的最接近匹配项。方法lowerEntry,floorEntry,ceilingEntry和higherEntry返回分别与小于,小于或者等于,大于或者等于和大于给定键的键关联的Map.Entry对象,如果没有这样的键,则返回null。

迭代集合的接口

  • Iterable接口–实现java.lang.Iterable接口允许对象成为" for-each循环"语句的目标。集合接口扩展了此接口,以便可以使用for-each循环迭代集合类。
  • Iterator接口– java.util.Iterator使我们可以遍历集合。它还允许调用者在迭代过程中从基础集合中删除元素。
  • ListIterator接口–扩展Iterator并提供特殊的行为以沿任一方向遍历列表,在迭代过程中修改列表并获取迭代器在列表中的当前位置。

Java Collections类

我们已经遍历了Java Collections框架的核心接口,现在让我们遍历实现这些接口的类。类别又从一般的演变为更具体的,因此有一些抽象的类实现了接口以提供一般的实现,然后还有针对特定集合的更具体的类。

  • AbstractCollection-此抽象类提供Collection接口的基本实现,以最大程度地减少实现此接口所需的工作。
  • AbstractList –此抽象类扩展AbstractCollection并实现List接口,以最大程度地减少实现此接口所需的工作。
  • AbstractSet –此抽象类扩展AbstractCollection并实现Set接口,以最大程度地减少实现此接口所需的工作。
  • AbstractQueue-此抽象类扩展AbstractCollection并实现Queue接口,以提供某些Queue操作的基本实现。
  • AbstractSequentialList –扩展AbstractList以提供使用其元素的顺序访问(例如链接列表)而不是随机访问(例如数组列表)的集合实现。
  • ArrayList – Java ArrayList扩展AbstractList并提供List接口的可调整大小的数组实现。请参考Java中的ArrayList以了解有关Java中的Arraylist的更多信息。
  • LinkedList –扩展AbstractSequentialList并提供List和Deque接口的双链列表实现。
  • HashSet –扩展AbstractSet并为不允许重复的无序集合提供实现。请参阅Java中的HashSet以了解有关Java中的HashSet的更多信息。
  • LinkedHashSet –扩展HashSet并为Set提供专门的实现,以维护迭代顺序,该顺序是将元素插入到集合中的顺序。请参阅Java中的LinkedHashSet以了解有关Java中的LinkedHashSet的更多信息。
  • TreeSet –扩展AbstractSet并实现NavigableSet接口以提供有序的Set。请参阅Java中的TreeSet以了解有关Java中的TreeSet的更多信息。
  • EnumSet –扩展AbstractSet并提供专门的Set实现以用于枚举类型。
  • ArrayDeque –扩展AbstractCollection并实现Deque接口,以提供Deque接口的Resizable-array实现。在ArrayDeque中,我们可以在两个端点处添加和删除元素。

map相关类

  • AbstractMap-此抽象类提供Map接口的基本实现,以最大程度地减少实现此接口所需的工作。
  • HashMap –扩展AbstractMap并提供基于哈希表的Map接口实现。请参阅Java中的HashMap,以了解有关Java中的HashMap的更多信息。
  • LinkedHashMap –扩展了HashMap,并为Map提供了专门的实现,以维护迭代顺序,该顺序通常是将键插入到映射中的顺序。请参阅Java中的LinkedHashMap以了解有关Java中的LinkedHashMap的更多信息。
  • TreeMap –扩展AbstractMap并实现NavigableMap以提供有序的Map。根据映射键的自然顺序或者在映射创建时提供的Comparator对映射进行排序,具体取决于所使用的构造函数。请参阅Java中的TreeMap以了解有关Java中的TreeMap的更多信息。
  • IdentityHashMap –扩展了AbstractMap并提供了在比较键和值时使用引用相等代替对象相等的实现。在IdentityHashMap中,当且仅当(k1 == k2)时,两个键k1和k2才被视为相等,而在正常Map实现中,当且仅当(k1 == null?k2 == null时,才认为两个键k1和k2是相等的。 :k1.equals(k2))。
  • EnumMap –扩展AbstractMap并提供用于枚举类型键的专用Map实现。
  • WeakHashMap –扩展AbstractMap并提供具有弱键的基于Hash表的Map接口实现。如果WeakHashMap中的条目不再是普通密钥,则该条目将被自动删除。