1. 程式人生 > >Java集合框架概述

Java集合框架概述

概述

什麼是集合?

這Java官方的入門文件是這樣描述集合的:

Collection(有時候也叫container)是一個簡單的物件,它把多個元素組織成一個單元。集合可以用來儲存、檢索、操作、通訊。通常情況下,集合代表了一個自然資料項,比如一組手牌(牌的集合)、郵件資料夾(郵件的集合)、電話目錄(姓名到電話的對映)。如果你使用過Java或者其他語言,你應該很熟悉集合。

什麼是集合框架?

Collections Framework是一個用來表示和操作集合的統一的架構。集合的框架包括了:

  • Interfaces:
    這些是表示集合的抽象資料型別,介面允許集合完成操作,獨立與其詳細的實現。在面向物件的語言中,介面構成了體系架構;
  • Implementations:
    這些是介面的具體實現。本質上,是一些可複用的資料結構;
  • Algorithms:
    這些方法可以對介面實現的物件進行有用的計算,比如搜尋、排序。這些演算法是具有多型性的:也就是說,同樣的方法可以用在合適的介面的不同實現。本質上,是一些可複用的函式。

除了Java的集合框架,還有一些著名的集合框架的例子:比如C++的STL和Smalltalk的集合架構。從歷史上來看,集合框架可能比較複雜,也可能有一些很陡峭的學習曲線。不過我們相信Java的集合框架會突破這樣的傳統,在這章你就可以自己學會。

使用集合框架有什麼好處?

Java的集合框架提供了一下優點:

  • 減少程式設計的工作量
    :通過提供有用的資料結構和演算法,集合框架能讓你更專注的實現程式的核心功能,而不是去做一個底層的“管道工”。Java框架通過促進無關API的互操作性,使得你不用自己去實現不同API的適配
  • 提高程式的速度與質量:集合框架提供了一些有用資料結構和演算法的高效能、高質量的實現。每個介面的不同的實現也是可以互換的,所以程式可以通過切換集合來做一些調整。正因為你從實現資料結構的那些苦差事中脫離出來,你才可以有更多的實現去改善你自己程式的效能和質量
  • 允許無關APIs的互操作:集合介面是API之間傳遞集合的一個“方言”,比如我的網路管理API有一個節點名的集合,而GUI工具需要一個列標題的集合,即使是分開實現它們,我們的APIs也可以無縫的接合。
  • 省力地學習和使用新API
    這是另一個領先的優勢,設計者和實現者沒必要在每次都重新設計API的時候都“推倒重來”地實現集合,而是直接使用標準的集合介面就好了。
  • 促進軟體的複用:符合標準集合介面的新資料結構本質上是可以複用的。對於操作這些新資料結構演算法也是一樣可以複用的。

因此,後面也便從介面、實現、演算法幾方面結合著程式碼和官方的文件學習總結一下。

介面

java interface
在Java中所有的核心集合介面都是generic的

1
2
3
4
5
6
7
8
9
10
public interface Collection<E> extends Iterable<E> {}
public interface List<E> extends Collection<E> {}
public interface Queue<E> extends Collection<E> {}
public interface Deque<E> extends Queue<E> {}
public interface Set<E> extends Collection<E> {}
public interface SortedSet<E> extends Set<E> {}
public interface NavigableSet<E> extends SortedSet<E> {}
public interface Map<K,V> {}
public interface SortedMap<K,V> extends Map<K,V> {}
public interface NavigableMap<K,V> extends SortedMap<K,V> {}

也就是說在宣告一個Collection的時候,應該指定一種型別。官方是這樣解釋原因的:

Specifying the type allows the compiler to verify (at compile-time) that the type of object you put into the collection is correct, thus reducing errors at runtime.

下面就來介紹一下幾種介面:

  • Collection: 集合層次中的根。一個集合表示一組物件。有些有序,有些無序。有些重複,有些重複。Collection沒有直接的實現,而只有它的子介面的對應的實現。
  • Set不能包含重複的元素,比如撲克手牌、學生選課計劃、計算機的程序。
  • List:有序的集合,也可以包含重複的元素。用於對每個元素精確的控制,比如插入、用index來索引。
  • Queue:用於多元素有優先順序的處理,可以用做FIFO
  • Deque:用於多元素有優先順序的處理,double ended queue,可以用作FIFO,LIFO
  • Map:用於keys到values的對映,不能包含重複元素
    另外還提供了2個帶排序的Set和Map。
  • SortedSet元素升序
  • SortedMapkey升序

在1.6版本開始,還有兩種新的介面NavigableSetNavigableMap

A SortedMap/SortedSet extended with navigation methods reporting closest matches for given search targets.

提供諸如:

1
2
//返回第一個大於e的元素
E higher(E e);

之類的“導航性質”的便捷操作。

以上便是Java集合框架與介面的相關內容。

原文連結:http://yikun.github.io/2015/03/31/Java%E9%9B%86%E5%90%88%E6%A1%86%E6%9E%B6/