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

Android Collections集合框架使用详解

                                    图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(); 

可以更加强大的定义自己的比较器,定义不同的字段,比如:比较不同品牌汽车的价格,销量,油耗等,可以直接使用此方法进行比较。

具体的使用可以参考下这篇文章 Java中Collections详解

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的一些常见用法已经可以熟练掌握了。







        


相关文章: