当前位置:   article > 正文

Collections工具类_collecutil banarysearch

collecutil banarysearch
  1. /*
  2. Collections 是一个操作 Set、List 和 Map 等集合的工具类。Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法:
  3. * public static <T> boolean addAll(Collection<? super T> c,T... elements)将所有指定元素添加到指定 collection 中。
  4. * public static <T> int binarySearch(List<? extends Comparable<? super T>> list,T key)在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且必须是可比较大小的,即支持自然排序的。而且集合也事先必须是有序的,否则结果不确定。
  5. * public static <T> int binarySearch(List<? extends T> list,T key,Comparator<? super T> c)在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且集合也事先必须是按照c比较器规则进行排序过的,否则结果不确定。
  6. * public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)在coll集合中找出最大的元素,集合中的对象必须是T或T的子类对象,而且支持自然排序
  7. * public static <T> T max(Collection<? extends T> coll,Comparator<? super T> comp)在coll集合中找出最大的元素,集合中的对象必须是T或T的子类对象,按照比较器comp找出最大者
  8. * public static void reverse(List<?> list)反转指定列表List中元素的顺序。
  9. * public static void shuffle(List<?> list) List 集合元素进行随机排序,类似洗牌
  10. * public static <T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺序对指定 List 集合元素按升序排序
  11. * public static <T> void sort(List<T> list,Comparator<? super T> c)根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
  12. * public static void swap(List<?> list,int i,int j)将指定 list 集合中的 i 处元素和 j 处元素进行交换
  13. * public static int frequency(Collection<?> c,Object o)返回指定集合中指定元素的出现次数
  14. * public static <T> void copy(List<? super T> dest,List<? extends T> src)将src中的内容复制到dest中
  15. * public static <T> boolean replaceAll(List<T> list,T oldVal,T newVal):使用新值替换 List 对象的所有旧值
  16. * Collections 类中提供了多个 synchronizedXxx() 方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题
  17. * Collections类中提供了多个unmodifiableXxx()方法,该方法返回指定 Xxx的不可修改的视图。
  18. */

1.二分查找binarySearch

  1. @Test
  2. public void test02(){
  3. /*
  4. * public static <T> int binarySearch(List<? extends Comparable<? super T>> list,T key)
  5. * 要求List集合的元素类型 实现了 Comparable接口,这个实现可以是T类型本身也可以T的父类实现这个接口。
  6. * 说明List中的元素支持自然排序功能。
  7. * 在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且必须是可比较大小的,即支持自然排序的。而且集合也事先必须是有序的,否则结果不确定。
  8. * public static <T> int binarySearch(List<? extends T> list,T key,Comparator<? super T> c)
  9. * 说明List集合中元素的类型<=T,Comparator<? super T>说明要传入一个Comparator接口的实现类对象,实现类泛型的指定要求>=T
  10. * 例如:List中存储的是Man(男)对象,T可以是Person类型,实现Comparator的时候可以是 Comparator<Person>
  11. * 例如:List中存储的是Man(男)对象,T可以是Man类型,实现Comparator的时候可以是 Comparator<Person>
  12. * 在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且集合也事先必须是按照c比较器规则进行排序过的,否则结果不确定。
  13. *
  14. * 二分查找要求数组或List必须是“有大小顺序”。
  15. * 二分查找的思路: 和[mid]元素比较,如果相同,就找到了,不相同要看大小关系,决定去左边还是右边继续查找。
  16. */
  17. List<Man> list = new ArrayList<>();
  18. list.add(new Man("张三",23));
  19. list.add(new Man("李四",24));
  20. list.add(new Man("王五",25));
  21. // int index = Collections.binarySearch(list, new Man("王五", 25));//要求实现Comparable接口
  22. // System.out.println(index);
  23. int index = Collections.binarySearch(list, new Man("王五", 25), new Comparator<Person>() {
  24. @Override
  25. public int compare(Person o1, Person o2) {
  26. return o1.getAge() - o2.getAge();
  27. }
  28. });
  29. System.out.println(index);
  30. }

2.求最大值

  1. @Test
  2. public void test03(){
  3. /*
  4. * public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
  5. * <T extends Object & Comparable<? super T>>:要求T必须继承Object,又实现Comparable接口,或者T的父类实现Comparable接口
  6. * 在coll集合中找出最大的元素,集合中的对象必须是T或T的子类对象,而且支持自然排序
  7. * public static <T> T max(Collection<? extends T> coll,Comparator<? super T> comp)
  8. * 在coll集合中找出最大的元素,集合中的对象必须是T或T的子类对象,按照比较器comp找出最大者
  9. *
  10. */
  11. List<Man> list = new ArrayList<>();
  12. list.add(new Man("张三",23));
  13. list.add(new Man("李四",24));
  14. list.add(new Man("王五",25));
  15. /*Man max = Collections.max(list);//要求Man实现Comparable接口,或者父类实现
  16. System.out.println(max);*/
  17. Man max = Collections.max(list, new Comparator<Man>() {
  18. @Override
  19. public int compare(Man o1, Man o2) {
  20. return o2.getAge()-o2.getAge();
  21. }
  22. });
  23. System.out.println(max);
  24. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/502662
推荐阅读
相关标签
  

闽ICP备14008679号