1. 程式人生 > >Android Collections集合框架使用詳解

Android Collections集合框架使用詳解

Collection在Android中的用法

最近在做Android專案的時候,遇到了一些集合排序的問題,之前也使用過Collections的一些方法,

例如Collections.sort(),Collections.swap()...,於是就統一整理了一下Collections的一些常用功能。

  1. Collection和Collections的區別
  2. 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的一些常見用法已經可以熟練掌握了。