Android Collections集合框架使用詳解
Collection在Android中的用法
最近在做Android專案的時候,遇到了一些集合排序的問題,之前也使用過Collections的一些方法,
例如Collections.sort(),Collections.swap()...,於是就統一整理了一下Collections的一些常用功能。
- Collection和Collections的區別
- Collections集合的常用方法
1.java.util.Collection是一個集合介面(集合類的一個頂級介面)。它提供了對集合物件進行基本操作的通用介面方法。Collection介面在java類庫中有很多具體的實現。Collection介面的意義是為各種具體的集合提供了最大化的統一操作方式,其直接繼承介面有List和Set。
Collection介面的簡單繼承關係 如圖1.1
圖1.1
2.Collections則是集合類的一個工具類,其中提供了一系列靜態方法,用於對集合中元素進行排序,搜尋以及執行緒安全等各種操作。
1)排序(Sort)
雖然已經有很多的排序演算法(氣泡排序,選擇排序,插入排序等....),但是這裡介紹的是Java中Collections框架提供的一個方法,
使用這個方法我們可以很方便的實現很多功能,一行程式碼即可,
使用方法:Collections.sort(list)
例:
List<Integer> list = new ArrayList<Integer>();
int array[] = {123,45,6,45,878,1452,12};
for(int i = 0 ; i <array.length; i ++) {
list.add(array[i]);
}
Collections.sort(list);
for(int i = 0 ; i<array.length;i++){
System.out.println(list.get[i]);
}
結果: 6 12 45 45 123 878 1452
使用方法2:Collection.sort(list,new MyComparator();
可以更加強大的定義自己的比較器,定義不同的欄位,比如:比較不同品牌汽車的價格,銷量,油耗等,可以直接使用此方法進行比較。
2)交換(Swap)
使用swap方法可以交換集合中任意兩個元素的位置,這對於Android中某些場景的使用還是很常見的,比如使用者銀行卡有很多張,在頁面展示的時候,需要把主卡放到第一個位置,這時就需要把主卡和第一張在集合中的位置進行交換。
使用方法: Collections.swap()
例:
List<Integer> list = new ArrayList<Integer>();
int array[] = {1,2,3,4,5,6,7,8};
for(int i = 0 ; i <array.length; i ++) {
list.add(array[i]);
}
Collections.swap(list,0,1);
引數解析
list-- 在該列表中的調劑元素。
i-- 要交換的一個元素的索引。
j-- 要交換的其它元素的索引。
for(int i =0; i<array.length;i++){
println(list.get[i]);
}
結果:2 1 3 4 5 6 7 8
3)反轉(Reverse)
使用Reverse方法可以根據元素的自然順序,對指定列表按降序進行排序。
使用方法: Collections.reverse()
例:
List<Integer> list = new ArrayList<Integer>();
int array[] = {1,2,3,4,5,6,7,8};
for(int i = 0 ; i <array.length; i ++) {
list.add(array[i]);
}
Collections.reverse(list);
for(int i =0; i<array.length;i++){
println(list.get[i]);
}
結果:8 7 6 5 4 3 2 1
4)混排(Shuffling)
該演算法所做的正好於sort相反:它打亂在一個List中可能有的任何排列的蹤跡。也就是說,基於隨機源的輸入重排該List,這樣的排列具有相同的可能性(假設隨機源是公正的)。這個演算法在實現一個碰運氣的遊戲中是非常有用的。例如,它可被用來混排代表一副牌的Card物件的一個List。另外,在生成測試案例時,它也是十分有用的。
使用方法: Collections.reverse()
例:
List<Integer> list = new ArrayList<Integer>();
int array[] = {1,2,3,4,5,6,7,8};
for(int i = 0 ; i <array.length; i ++) {
list.add(array[i]);
}
Collections.reverse(list);
for(int i =0; i<array.length;i++){
println(list.get[i]);
}
結果:這裡隨便測試了幾組
8 4 3 5 2 1 6 7
4 3 5 2 1 7 8 6
.....
5)替換所有的元素(Fill)
使用指定元素替換指定集合中的所有元素
使用方法: Collections.fill()
例:
List<Integer> list = new ArrayList<Integer>();
int array[] = {1,2,3,4,5,6,7,8};
for(int i = 0 ; i <array.length; i ++) {
list.add(array[i]);
}
Collections.fill(list,11);
for(int i =0; i<array.length;i++){
println(list.get[i]);
}
結果:11 11 11 11 11 11 11 11
6)拷貝(Copy)
用兩個引數,一個目標List和一個源List,將源List的元素拷貝到它的目標,並覆蓋它的內容。目標List至少與源一樣長。如果它更長,則在目標List中的剩餘元素不受影響。
使用方法: Collections.copy()
例:
List<Integer> list = new ArrayList<Integer>();
List<Integer> list2 = new ArrayList<Integer>();
int array[] = {1,2,3,4,5,6,7,8};
for(int i = 0 ; i <array.length; i ++) {
list.add(array[i]);
}
Collections.copy(list,list2);
for(int i =0; i<array.length;i++){
println(list2.get[i]);
}
結果:1,2,3,4,5,6,7,8
-------以下Collections的函式使用方法和例子與上面類似,故此處不重複舉例-----------------------
7)返回Collections中最小的元素(min)
根據指定比較器產生的順序,返回給定collection的最小元素。collection中的所有元素都必須是通過指定比較器可互相比較的。
collections.min(list);
8)返回Collection中的最大元素(max)
根據指定比較器產生的順序,返回給定collection的最大元素。collection中的所有元素都必須是通過指定比較器可互相比較的。
collection.max(list);
9)lastIndexOfSubList
返回指定源列表中最後一次出現指定表列表的起始位置
int count = Collection.lastIndexOfSubList(list,li);
10)IndexOfSubList
返回指定源列表第一次出現指定目標列表的起始位置
int count= Collections.indexOfSubList(list,li);
11)Rotate
根據指定的距離迴圈移動指定列表中的元素
Collections.rotate(list,-1);
如果是負數,則正向移動,如果是正數,則反向移動。
-----------------------------
這期內容就這麼多,
通過上面的方法介紹,
相信你現在對 Collections和Collection的區別,
以及Collections的一些常見用法已經可以熟練掌握了。