集合工具类

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]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值