Java集合工具类:Collections

谁借莪1个温暖的怀抱¢ 2022-02-20 15:38 453阅读 0赞

Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象实现同步控制等方法。

一、 排序

1. reverse:反转指定列表中元素的顺序

Collections.reverse(List list)
在这里插入图片描述

2. shuffle:使用默认随机源对指定列表进行置换

Collections.shuffle(List list)
在这里插入图片描述

3. sort

(1) Collections.sort(List list):根据元素的自然顺序 对指定列表按升序进行排序

在这里插入图片描述

(2) Collections.sort(List list, Comparator c):根据指定比较器产生的顺序对指定列表进行排序

在这里插入图片描述

4. swap:在指定列表的指定位置处交换元素

Collections.swap(List list, int i, int j)
在这里插入图片描述

5. rotate:根据指定的距离轮换指定列表中的元素

Collections.rotate(List list, int distance)
在这里插入图片描述

二、 查找和替换

(1) binarySearch(List list, T key):使用二分搜索法搜索指定列表,以获得指定对象。
(2) binarySearch(List list, T key,Comparator c):使用二分搜索法搜索指定列表,以获得指定对象。
(3) max(Collection coll):根据元素的自然顺序,返回给定 collection 的最大元素。
(4) max(Collection coll,Comparator c):根据指定比较器产生的顺序,返回给定 collection 的最大元素。
(5) min(Collection coll):根据元素的自然顺序,返回给定 collection 的最小元素。
(6) min(Collection coll,Comparator c):根据指定比较器产生的顺序,返回给定 collection 的最小元素。
(7) fill(List list, T obj):使用指定元素替换指定列表中的所有元素。
(8) frequency(Collection c, Object o):返回指定 collection 中等于指定对象的元素数。
(9) indexOfSubList(List source, List target):返回指定源列表中第一次出现指定目标列表的起始位置;如果没有出现这样的列表,则返回 -1。
(10) lastIndexOfSubList(List source, List target):返回指定源列表中最后一次出现指定目标列表的起始位置;如果没有出现这样的列表,则返回 -1。
(11) replaceAll(List list, T oldVal, T newVal):使用另一个值替换列表中出现的所有某一指定值。

例:
  1. import java.util.List;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. public class SearchDemo {
  5. public static void main(String[] args) {
  6. List<Integer>list = new ArrayList<>();
  7. list.add(5);
  8. list.add(-10);
  9. list.add(3);
  10. list.add(9);
  11. list.add(-1);
  12. list.add(7);
  13. list.add(0);
  14. System.out.println(list+"\n");
  15. //对nums集合排序
  16. Collections.sort(list);
  17. System.out.println(list);
  18. System.out.println("---binarySearch(list, 5)---");
  19. //只有排序后的List集合才可用二分法查询元素的索引
  20. System.out.println(Collections.binarySearch(list, 5));
  21. System.out.println("---max(list)---");
  22. //输出最大元素
  23. System.out.println(Collections.max(list));
  24. System.out.println("---min(list)---");
  25. //输出最小元素
  26. System.out.println(Collections.min(list));
  27. System.out.println("---fill(list, 0)---");
  28. Collections.fill(list, 0);//用0替换list的所有元素
  29. System.out.println(list);
  30. System.out.println("---frequency(list, 0)---");
  31. //0在list集合中出现的次数
  32. System.out.println(Collections.frequency(list, 0));
  33. List<Integer> list2=new ArrayList<>();
  34. list2.add(0);
  35. list2.add(0);
  36. System.out.println("---indexOfSubList---");
  37. //查找子列表在列表中第一次出现的位置,没有返回-1
  38. System.out.println(Collections.indexOfSubList(list, list2));
  39. System.out.println("---lastIndexOfSubList---");
  40. //查找子列表在列表中最后一次出现的位置,没有返回-1
  41. System.out.println(Collections.lastIndexOfSubList(list , list2));
  42. System.out.println("---replaceAll---");
  43. // 将nums中的0替换为1
  44. Collections.replaceAll(list, 0, 1);
  45. System.out.println(list);
  46. }
  47. }
输出:
  1. [5, -10, 3, 9, -1, 7, 0]
  2. [-10, -1, 0, 3, 5, 7, 9]
  3. ---binarySearch(list, 5)---
  4. 4
  5. ---max(list)---
  6. 9
  7. ---min(list)----
  8. 10
  9. ---fill(list, 0)---
  10. [0, 0, 0, 0, 0, 0, 0]
  11. ---frequency(list, 0)---
  12. 7
  13. ---indexOfSubList---
  14. 0
  15. ---lastIndexOfSubList---
  16. 5
  17. ---replaceAll---
  18. [1, 1, 1, 1, 1, 1, 1]

三、 同步控制

Collections类中提供了多个synchronized…()方法,这些方法可以将指定集合包装成线程同步(线程安全)的集合,从而可以解决多线程并发访问集合时的线程安全问题。

Java中常用的集合框架中的实现类ArrayList、Linkedlist、HashSet、TreeSet、HashMap和TreeMap都是线程不安全的。如果有多个线程访问它们,而且有超过一个的线程试图修改它们,则存在线程安全的问题。Collections提供了多个类方法可以把它们包装成线程同步的集合。

例:
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Set;
  8. public class SynchronizedDemo {
  9. public static void main(String[] args) {
  10. List<String> list=Collections.synchronizedList(new ArrayList<String>());
  11. Set<String> set=Collections.synchronizedSet(new HashSet<String>());
  12. Map<Integer,String> map=Collections.synchronizedMap(new HashMap<Integer,String>());
  13. }
  14. }

发表评论

表情:
评论列表 (有 0 条评论,453人围观)

还没有评论,来说两句吧...

相关阅读