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();
可以更加强大的定义自己的比较器,定义不同的字段,比如:比较不同品牌汽车的价格,销量,油耗等,可以直接使用此方法进行比较。
具体的使用可以参考下这篇文章 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的一些常见用法已经可以熟练掌握了。