1. 程式人生 > >面向演算法程式設計的java常用集合

面向演算法程式設計的java常用集合

一、集合基本Collection介面及其常用API
**在 Java 類庫中, 集合類的基本介面是 Collection 介面 。**下面列出 Collection 介面常用的API:

java . util . Collection < E > 1.2

• Iterator < E > iterator ()
返回一個用於訪問集合中每個元素的迭代器 。

•int size ()
返回當前儲存在集合中的元素個數。

•boolean isEmpty ()
如果集合中沒有元素 , 返回 true。

•boolean contains ( Object obj )
如果集合中包含了一個與 obj 相等的物件 , 返回 true。

•boolean containsAll ( Collection < ? > other )
如果這個集合包含 other 集合中的所有元素 , 返回 true。

•boolean add ( Object element )
將一個元素新增到集合中。 如果由於這個呼叫改變了集合 , 返回true 。

•boolean addAll ( Collection < ? extends E > other )
將 other 集合中的所有元素新增到這個集合。 如果由於這個呼叫改變了集合 , 返回true。

•boolean remove ( Object obj )從這個集合中刪除等於 obj 的物件。 如果有匹配的物件被刪除 , 返回true。

•boolean removeAll ( Collection < ? > other )
從這個集合中刪除 other 集合中存在的所有元素。 如果由於這個呼叫改變了集合 , 返回 true 。

•void clear ( )
從這個集合中刪除所有的元素 。

•boolean retainAll( Collection < ? > other )
從這個集合中刪除所有與 other 集合中的元素不同的元素 。 如果由於這個呼叫改變了集合 , 返回 true。

•Object [] toArray ( )
返回這個集合的物件陣列。

二、有序集合基本List介面及其常用API:
有序集合大多數都繼承裡List介面
java.util.List 1.2

•ListIterator < E > listIterator ( )
返回一個列表迭代器, 以便用來訪問列表中的元素 。

•void add ( int i , E element )
在給定位置新增一個元素 。

•E remove ( int i )
刪除給定位置的元素並返回這個元素。

•E get ( int i )
獲取給定位置的元素。

•E set ( int i , E element )
用新元素取代給定位置的元素 , 並返回原來那個元素 。

•int indexOf ( Object element )
返回與指定元素相等的元素在列表中第一次出現的位置 , 如果沒有這樣的元素將返回 - 1。
•int lastlndexOf ( Object element )
返回與指定元素相等的元素在列表中最後一次出現的位置 , 如果沒有這樣的元素將返回 - 1.

三、連結串列(實現了List介面)
(1)連結串列自身常用API:java.util.LinkedList 1.2

•LinkedList ()
構造一個空連結串列。

•void addFirst ( E element )
•void addLast ( E element )
將某個元素新增到列表的頭部或尾部。

•E getFirst ( )
•E getLast ( )
返回列表頭部或尾部的元素 。

•E removeFirst ( )
•E removeLast ( )
刪除並返回列表頭部或尾部的元素 。

(2)連結串列迭代器:java . util . Listlterator < E > 1.2

•void add ( E newElement )
在當前位置前新增一個元素。

•void set ( E newElement )
用新元素取代 next 或 previous 上次訪問的元素。 如果在next 或 
previous 上次呼叫之後列表結構被修改了, 將丟擲一個
IllegalStateException 異常。

•boolean hasPrevious ()
當反向迭代列表時, 還有可供訪問的元素 , 返回true 。

•E previous ( )
返回前物件。 如果已經到達了列表的頭部 ,就丟擲一個
NoSuchElementException 異常。

•int nextlndex ()
返回下一次呼叫 next 方法時將返回的元素索引 。
•int previousIndex ( )
返回下一次呼叫 previous 方法時將返回的元素索引。

四、動態陣列ArrayList(也繼承了Liist介面):

add(E e)方法
新增指定元素到末尾

add(int index, E element)
在ArrayList的index位置,新增元素element

remove(int index)
移除指定位置元素

remove(Object o)
移除指定元素 

set(int index, E element)
替換元素(替換指定下標的元素內容)

get(int index)
查詢元素

void clear()
清空元素

五、雜湊集合與樹集
(1)雜湊集合:
java . util . HashSet < E > 1.2

•HashSet ( )
構造一個空散列表 。

•HashSet ( Collection < ? extends E > elements )
構造一個雜湊集 , 並將集合中的所有元素新增到這個雜湊集中 。

•HashSet ( int initialCapacity )
構造一個空的具有指定容量 ( 桶數 ) 的雜湊集 。

(2)樹集
註釋 : 要使用樹集 , 必須能夠比較元素 。 這些元素必須實現 Comparable 介面 ( 參見6.1 . 1節 ), 或者構造集時必須提供一個 Comparator( 參見 6.2 . 2 節和 6.3 . 8 節 )。
java . util . TreeSet 1.2

• TreeSet( )
• TreeSet( Comparator < ? super E > comparator )構造一個空樹集 。
構造一個樹集 , 並增加一個集合或有序集中的所有元素 ( 對於後一種情況,
要使用同樣的順序 )。

java . util . NavigableSet < E > 6

 Iterator < E >descendingIterator()
返回一個按照遞減順序遍歷集中元素的迭代器。

(3)關於TreeSet與HashSet選擇問題:
樹集插入一個數據的速度要比雜湊集合慢,在不需要對資料進行排序的情況下不需要用樹集。

六、佇列、優先佇列及雙端佇列:
(1)佇列
java . utii . Queue < E > 5.0

•boolean add ( E element )
•boolean offer ( E element )
如果佇列沒有滿, 將給定的元素新增到這個佇列(或者雙端佇列)的尾部並返回 true 。 如果佇列
滿了, 第一個方法將丟擲一IllegalStateException ,而第二個方法返回 false。

•E remove ( )
•E poll ( )
假如佇列不空, 刪除並返回這個佇列頭部的元素。如果佇列是空的 , 第一個方法丟擲
NoSuchElementException , 而第二個方法返回 null。

•E elementC )
•E peek ( )
如果佇列不空, 返回這個佇列頭部的元素 , 但不刪除 。 如果佇列空 , 第一個方法將丟擲一個 
NoSuchElementException , 而第二個方法返回 null。

(2)優先佇列
與 TreeSet一樣, 一個優先順序佇列既可以儲存實現了 Comparable 介面的類物件 , 也可以儲存在構造器中提供的 Comparator 物件。
java . util . PriorityQueue 5.0
•PriorityQueue ( )
•PriorityQueue ( int initialCapacity )
構造一個用於存放 Comparable 物件的優先順序佇列。
•PriorityQueue ( int initialCapacity , Comparator ? super E > c )
構造一個優先順序佇列 , 並用指定的比較器對元素進行排序。
(3)雙端佇列
java . util . Deque < E > 6

•void addFirst ( E element )
•void addLast ( E element )
•boolean offerFirst ( E element )
•boolean offerLast ( E element )
將給定的物件新增到雙端佇列的頭部或尾部。
如果佇列滿了 , 前面兩個方法將丟擲一個IllegalStateException, 而後面兩個
方法返回false。
•E removeFirst ( )
•E removeLast ( )
•E pollFirstO
•E pollLastO
如果佇列不空, 刪除並返回佇列頭部的元素 。 
如果佇列為空 , 前面兩個方法將丟擲一個 NoSuchElementException , 而後面兩
個方法返回 null 。
•E getFirstO
•E getLastO
•E peekFirstO
•E peekLast ( )
如果佇列非空, 返回佇列頭部的元素 , 但不刪除 。 如果佇列空 , 前面兩個方
法將丟擲一個NoSuchElementException , 而後面兩個方法返回 null 。

java . util . ArrayDeque < E > 6

•ArrayDeque ( )
•ArrayDeque ( int initialCapacity )
用初始容量 16 或給定的初始容量構造一個無限雙端佇列。

七、對映(雜湊對映與紅黑樹對映):重點
(1)基本對映map API:
java . util . Map < K, V > 1.2//map介面

•V get ( Object key )
獲取與鍵對應的值 ; 返回與鍵對應的物件 , 如果在對映中沒有這個物件
則返回 null。鍵可以為 null。

•default V getOrDefault ( Object key , V defaultValue )
獲得與鍵關聯的值 ; 返回與鍵關聯的物件, 或者如果未在對映中找到這個
鍵 , 則返回default Value。
樣例:
Map < String , Integer > scores = . .
int score = scores . get ( id , 0 ) ;
/ / Gets 0 if the id is not present

•V put ( K key , V value )
將鍵與對應的值關係插入到對映中。 如果這個鍵已經存在 , 新的物件將取
代與這個鍵對應的舊物件。 這個方法將返回鍵對應的舊值 。 如果這個鍵以
前沒有出現過則返回null 。 鍵可以為 null , 但值不能為 null 。

•boolean containsKey ( Object key )
如果在對映中已經有這個鍵, 返回true。

•boolean containsValue ( Object value )
如果對映中已經有這個值, 返回true。

(2)HashMap:
java . utii . HashMap<K, V> 1.2

•HashMap ( )
•HashMap ( int initialCapacity )
•HashMap ( int initialCapacity , float loadFactor )
用給定的容量和裝填因子構造一個空雜湊對映 ( 裝填因子是一個 0.0 〜 1.0
之間的數值。 這個數值決定散列表填充的百分比 。 一旦到了這個比例 , 就
要將其再雜湊到更大的表中 )。 預設的裝填因子是0.75。

(3)TreeMap:
java . util . TreeMap < K , V > 1.2

•TreeMap ( )
為實現 Comparable 介面的鍵構造一個空的樹對映。

• TreeMap ( Comparator < ? super K > c )
構造一個樹對映 , 並使用一個指定的比較器對鍵進行排序。

• TreeMap ( Map < ? extends K , ? extends V > entries )
構造一個樹對映 , 並將某個對映中的所有條目新增到樹對映中。