Java中的集合(Set,List,Map)
******************collections類總結***************************
JAVA集合主要分為三種類型:
Set(集)
List(列表)
Map(映射)
Collection 接口
Collection是最基本的集合接口,聲明了適用於JAVA集合(只包括Set和List)的通用方法。
Set 和List 都繼承了Conllection,Map沒有。
類Collections是一個包裝類。它包含有各種有關集合操作的靜態多態方法。此類不能實例化,就像一個工具類,服務於Java的Collection框架。 java.util.Collections
Collection接口的常用方法(這些方法都可以被Set和List繼承):
(1)sort()排序方法
函數定義:public static <T extends Comparable<? super T>> void sort(List<T> list) 根據元素的
自然順序對指定列表按升序進行排序。
參數:要排序的列表。
函數定義: public static <T> void sort(List<T> list,Comparator<? super T> c),根據指定比較器產生的順序對指定列表進行排序。此列表內的所有元素都必須可使用指定比較器相互比較。
參數:list-要排序的列表;c-確定列表順序的比較器。
(2)binarySearch()二分查找方法
函數定義:public static <T> int binarySearch(List<? extends Comparable<? super T>> list,T key)
使用二分搜索法搜索指定列表,以獲得指定對象,在進行此方法調用前比較要將列表元素按照升序排序,否則結果不確定,此方法會執行O(n)次鏈接遍歷和O(log n)次元素比較。
參數: list-要搜索的鏈表,key-要搜索的鍵。
函數定義: public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 根據指定的比較器對列表進行升序排序。
參數:list-要搜索的列表,key-要搜索的鍵,c-排序列表的比較器。
(3)reverse()反轉方法
函數定義:public static void reverse(List<?> list),反轉指定列表中元素的順序,此方法以線性時間運行。
參數:list-元素要被反轉的列表
(4)shuffle()改組方法
函數定義:public static void shuffle(List<?> list),使用默認隨機源對指定列表進行置換,所有置換發生的可能性都是大致相等的。
參數:list-要改組的列表
函數定義:public static void shuffle(List<?> list,Random rnd),使用指定的隨機源對指定列表進行置換。
參數:list-要改組的列表,rnd-用來改組列表的隨機源。
(5)swap()交換方法
函數定義:public static void swap(List<?> list,int i,int j),在指定列表的指定位置處交換元素。
參數:list-進行元素交換的列表,i-要交換的一個元素的索引,j-要交換的另一個元素的索引。
(6)fill()替換方法
函數定義:public static <T> void fill(List<? super T> list,T obj),使用指定元素替換指定列表中的所有元素,線性時間運行。
參數:list-使用指定元素填充的列表,obj-用來填充指定列表的元素。
(7)copy()復制方法
函數定義:public static <T> void copy(List<? super T> dest,List<? extends T> src),將所有元素從一個列表復制到另一個列表。執行此操作後,目標列表中每個已復制元素的索引將等同於源列表中該元素的索引,目標列表的長度至少必須等於源列表。
參數:dest-目標列表,src-源列表(被復制的列表)。
(8)min()最小值法
函數定義:public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll),根據元素的自然順序返回給定Collection的最小元素,Collection中的所有元素必須實現Comparable接口,此外,collection中的所有元素都必須是可相互比較的。
參數:coll-將確定其最小元素的collection。
函數定義:public static <T> T min(Collection<? extends T> coll,Comparator<? super T> comp),根據指定比較器產生的順序,返回給定collection的最小元素。
參數:coll-將確定其最小元素的collection,comp-用來確定最小元素的比較器。
(9)max()最大值方法
函數定義:public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll),根據元素的自然順序,返回給定collection的最大元素。
參數:coll-將確定其最大元素的collection。
函數定義:public static <T> T max(Collection<?extends T> coll,Comparator<? super T> comp),根據指定比較器產生的順序,返回給定collection的最大元素。
參數:coll-將確定其最大元素的collection,comp-用來確定最大元素的比較器
(10)rotate()輪換方法(移動元素方法)
函數定義:public static void rotate(List<?> list,int distance),根據指定的距離輪轉指定列表中的元素。
參數:list-要輪換的列表,distance-列表輪換的距離,可以使0、負數或者大於list.size()的數。
(11)replaceAll()替換所有函數
函數定義:public static <T> boolean replaceAll(List<T> list,T oldVal,T newVal),使用另一個值替換列表總出現的所有的某一指定值。
參數:list-在其中進行替換的列表;oldVal-將被替換的原值;newVal-替換oldVald的新值。
(12)addAll(Collection<? super T> c, T... elements)
將所有指定元素添加到指定 collection 中。
************Set的功能方法*************
1.Set的功能方法:
Set具有與Collection完全一樣的接口,因此沒有任何額外的功能,不像前面有兩個不同的List。實際上Set就是Collection,只是行為不同。(這是繼承與多態思想的典型應用:表現不同的行為。)Set不保存重復的元素(至於如何判斷元素相同則較為負責)
Set : 存入Set的每個元素都必須是唯一的,因為Set不保存重復元素。加入Set的元素必須定義equals()方法以確保對象的唯一性。Set與Collection有完全一樣的接口。Set接口不保證維護元素的次序。
HashSet : 為快速查找設計的Set。存入HashSet的對象必須定義hashCode()。
TreeSet : 保存次序的Set, 底層為樹結構。使用它可以從Set中提取有序的序列。
LinkedHashSet : 具有HashSet的查詢速度,且內部使用鏈表維護元素的順序(插入的次序)。於是在使用叠代器遍歷Set時,結果會按元素插入的次序顯示。
************List的功能方法************
2.List的功能方法:
實際上有兩種List: 一種是基本的ArrayList,其優點在於隨機訪問元素,另一種是更強大的LinkedList,它並不是為快速隨機訪問設計的,而是具有一套更通用的方法。
List : 次序是List最重要的特點:它保證維護元素特定的順序。List為Collection添加了許多方法,使得能夠向List中間插入與移除元素(這只推薦LinkedList使用。)一個List可以生成ListIterator,使用它可以從兩個方向遍歷List,也可以從List中間插入和移除元素。
ArrayList : 由數組實現的List。允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢。
ListIterator只應該用來由後向前遍歷ArrayList,而不是用來插入和移除元素。因為那比LinkedList開銷要大很多。
LinkedList : 對順序訪問進行了優化,向List中間插入與刪除的開銷並不大。隨機訪問則相對較慢。(使用ArrayList代替。)還具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些方法 (沒有在任何接口或基類中定義過)使得LinkedList可以當作堆棧、隊列和雙向隊列使用。
List接口繼承了Collection接口,ArrayList類和LinkedList類實現了List接口。
ArrayList類和LinkedList類的區別:
ArrayList:get,set快,add,remove慢,在表頭插入刪除的時候最慢,得移動整個數組
LinkedList:add,remove快,get,set慢,每次get都得從表頭開始遍歷O(n)
List包括List接口以及List接口的所有實現類。因為List接口實現了Collection接口,所以List接口擁有Collection接口提供的所有常用方法,又因為List是列表類型,所以List接口還提供了一些適合於自身的常用方法:
①add(int index, Object obj)方法和set(int index, Object obj)方法的區別
在使用List集合時需要註意區分add(int index, Object obj)方法和set(int index, Object obj)方法,前者是向指定索引位置添加對象,而後者是修改指定索引位置的對象。
②利用get(int index)方法獲得指定索引位置的對象
③indexOf(Object obj)方法和lastIndexOf(Object obj)方法的區別
在使用List集合時需要註意區分indexOf(Object obj)方法和lastIndexOf(Object obj)方法,前者是獲得指定對象的最小的索引位置,而後者是獲得指定對象的最大的索引位置,前提條件是指定的對象在List集合中具有重復的對象,否則如果在List集合中有且僅有一個指定的對象,則通過這兩個方法獲得的索引位置是相同的。
④subList(int fromIndex, int toIndex)方法
在使用subList(int fromIndex, int toIndex)方法截取現有List集合中的部分對象生成新的List集合時,需要註意的是,新生成的集合中包含起始索引位置代表的對象,但是不包含終止索引位置代表的對象。
Java中的集合(Set,List,Map)