集合工具类
程序员文章站
2022-03-09 19:39:38
...
Collections工具类
Collections类概述
针对集合操作 的工具类,里面的方法都是静态的,可以对集合进行排序、二分查找、反转、混排等。
Collection和Collections的区别
Collection:是单列集合的顶层接口,有子接口List和Set。Collections:是针对集合操作的工具类,有对集合进行排序和二分查找等方法
Collections常用方法
- public static <T> void sort(List<T> list)
使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此列表内的所有元素都必须是使用指定比较器可相互比较的
//public static <T> void sort(List<T> list):排序 默认情况下是自然顺序。
List<Integer> list = new ArrayList<Integer>();
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
System.out.println("new list:"+list);
//[30,20,50,10,40]
Collections.sort(list);
//[10, 20, 30, 40, 50]
//list根据Map<String,Object>里面的rownum字段进行正序排列
List<Map<String, Object>> res_list= new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<>();
map1.put("id", 3);
res_list.add(map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("id", 1);
res_list.add(map2);
Map<String, Object> map3 = new HashMap<>();
map3.put("id", 7);
res_list.add(map3);
System.out.println(res_list);
//[{id=3}, {id=1}, {id=7}]
Collections.sort(res_list, new Comparator<Object>() {
@SuppressWarnings("unchecked")
public int compare(Object o1, Object o2) {
Map<String, Object> map1 = (Map<String, Object>) o1;
Map<String, Object> map2 = (Map<String, Object>) o2;
Integer object1 = Integer.parseInt(map1.get("id").toString());
Integer object2 = Integer.parseInt(map2.get("id").toString());
return object1.compareTo(object2);
}
});
System.out.println(res_list);
//[{id=1}, {id=3}, {id=7}]
- public static <T> int binarySearch(List<?> list,T key)
使用二分搜索法搜索指定列表,以获得指定对象。
List<Integer> list = new ArrayList<Integer>();
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
System.out.println("new list:"+list);
//[30,20,50,10,40]
int i = Collections.binarySearch(list,30);
System.out.println("binarySearch:"+i);
//binarySearch:2
System.out.println("binarySearch:"+Collections.binarySearch(list,300));
//binarySearch:-6
注:此法为二分搜索法,故查询前需要用sort()方法将数组排序,如果数组没有排序,则结果是不确定的,另外如果数组中含有多个指定值的元素,则无法保证找到的是哪一个。
- public static T max(Collection<?> coll)
根据元素的自然顺序,返回给定 collection 的最大元素。
List<Integer> list = new ArrayList<Integer>();
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
System.out.println("new list:"+list);
//[30,20,50,10,40]
int i = Collections.max(list);
System.out.println(i);
//50
- public static void reverse(List<?> list)
反转指定列表中元素的顺序。
List<Integer> list = new ArrayList<Integer>();
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
System.out.println("new list:"+list);
//[30,20,50,10,40]
List<Integer> res_list = Collections.reverse(list);
System.out.println(res_list);
//[40,10,50,20,30]
-public static void shuffle(List<?> list)
混排算法所做的正好与 sort 相反: 它打乱在一个 List 中可能有的任何排列的踪迹。也就是说,基于随机源的输入重排该 List, 这样的排列具有相同的可能性。这个算法在实现一个碰运气的游戏中是非常有用的。
List<Integer> list = new ArrayList<Integer>();
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
System.out.println("new list:" + list);
//new list:[30, 20, 50, 10, 40]
Collections.sort(list);
System.out.println("sort:" + list);
//sort:[10, 20, 30, 40, 50]
Collections.shuffle(list);
System.out.println("shuffle:" + list);
//shuffle:[40, 50, 30, 20, 10]