三、Collections工具类
- 功能
- 一个操作Set、List和Map等集合的工具类
- 提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象不可变、对集合对象实现同步控制等方法
-
排序方法(List接口)
-
Set接口及Map接口中的元素是无序的,所以不涉及排序
-
代码示例
@Test public void test1() { ArrayList<String> list = new ArrayList<>(); list.add("123"); list.add("AA"); list.add("DD"); list.add("CC"); list.add("XX"); list.add("FF"); // list集合中元素的原本排序:[123, AA, DD, CC, XX, FF] System.out.println(list); // 反转排序 Collections.reverse(list); // 反转后:[FF, XX, CC, DD, AA, 123] System.out.println(list); // 随机排序 Collections.shuffle(list); // 输出结果:[123, FF, DD, AA, CC, XX] System.out.println(list); // 升序 Collections.sort(list); // 升序后:[123, AA, CC, DD, FF, XX] System.out.println(list); // 指定位置调换 Collections.swap(list,1,3); // [123, DD, CC, AA, FF, XX] System.out.println(list); }
-
-
替代方法
-
代码示例
@Test public void test2(){ ArrayList<Integer> list1 = new ArrayList<>(); Integer i; list1.add(123); list1.add(456); list1.add(789); list1.add(32); list1.add(43); list1.add(43); list1.add(43); list1.add(3456); // list1集合的原本排序 [123, 456, 789, 32, 43, 43, 43, 3456] System.out.println(list1); // 获取最大值 i = Collections.max(list1); // 3456 System.out.println(i); // 获取最小值 i = Collections.min(list1); // 32 System.out.println(i); // 获取指定数据的出现次数 i = Collections.frequency(list1,43); // 3 System.out.println(i); // 替换数据 Collections.replaceAll(list1, 43, 99); // 替换后:[123, 456, 789, 32, 99, 99, 99, 3456] System.out.println(list1); // 新造集合,并复制原有集合(新造集合的长度必须和原有集合一致) List list2 = Arrays.asList(new Object[list1.size()]); Collections.copy(list2,list1); // 拷贝结果与原集合一样 [123, 456, 789, 32, 99, 99, 99, 3456] System.out.println(list2); }
-
-
同步控制
Collections类中提供了多个synchronizedXxx( ) 方法,该方法可将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。
@Test public void test3() { // Arraylist1是线程不安全的,同样对象list也是线程不安全的 ArrayList<String> list = new ArrayList<>(); // 把list放入synchronizedList参数中,list就变成线程安全的了 List list1 = Collections.synchronizedList (list); } // synchronizedList的源码 public static <T> List<T> synchronizedList(List<T> list) { return (list instanceof RandomAccess ? new SynchronizedRandomAccessList<>(list) : new SynchronizedList<>(list)); }