集合

5-Collections工具类

2021-07-13 748 0

简介 Collections工具类的使用

1. Collections工具类

Collections 是一个操作 Set、 List 和 Map 等集合的工具类(操作数组的工具类是Arrays)

Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法

2. Collections常用的方法

2.1 方法一

reverse(List):反转 List 中元素的顺序

shuffle(List):对 List 集合元素进行随机排序

sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序

sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序

swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换

  1. //collectionstool.java

  2. package com.ylaihui;

  3. import java.util.ArrayList;

  4. import java.util.Collections;

  5. import java.util.Comparator;

  6. public class collectionstool {

  7.     public static void main(String[] args) {

  8.         ArrayList list = new ArrayList();

  9.         list.add(111);

  10.         list.add(222);

  11.         list.add(444);

  12.         list.add(333);

  13.         //reverse(List):反转 List 中元素的顺序

  14.         Collections.reverse(list);

  15.         System.out.println(list); // [333, 444, 222, 111]

  16.         //shuffle(List):对 List 集合元素进行随机排序

  17.         Collections.shuffle(list);

  18.         System.out.println(list);  // 随机排序

  19.         //sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序

  20.         Collections.sort(list);

  21.         System.out.println(list);  // [111, 222, 333, 444]

  22.         //swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换

  23.         Collections.swap(list, 01);

  24.         System.out.println(list);  // [222, 111, 333, 444]

  25.         //sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序

  26.         Comparator oc = new Comparator() {

  27.             @Override

  28.             public int compare(Object o1, Object o2) {

  29.                 if(o1 instanceof Integer && o2 instanceof Integer){

  30.                     Integer i1 = (Integer) o1;

  31.                     Integer i2 = (Integer) o2;

  32.                     return -Integer.compare(i1, i2);

  33.                 }

  34.                 else

  35.                     throw new RuntimeException("不能比较的类型");

  36.             }

  37.         };

  38.         Collections.sort(list, oc);

  39.         System.out.println(list); // [444, 333, 222, 111]  定制排序,从大到小排序

  40.     }

  41. }

2.2 方法二

Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素

Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素

Object min(Collection)

Object min(Collection,Comparator)

int frequency(Collection,Object):返回指定集合中指定元素的出现次数

void copy(List dest,List src):将src中的内容复制到dest中

boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值

  1. //collectionstool1.java

  2. package com.ylaihui.setitf;

  3. import java.util.ArrayList;

  4. import java.util.Arrays;

  5. import java.util.Collections;

  6. import java.util.List;

  7. public class collectionstool1 {

  8.     public static void main(String[] args) {

  9.         ArrayList list = new ArrayList();

  10.         list.add(111);

  11.         list.add(222);

  12.         list.add(444);

  13.         list.add(333);

  14.         //Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素

  15.         System.out.println(Collections.max(list));  // 444

  16.         //Object min(Collection)

  17.         System.out.println(Collections.min(list));  // 111

  18.         //Object max(Collection,Comparator): 根据 Comparator 指定的顺序,返回给定集合中的最大元素

  19.         //Object min(Collection,Comparator): 根据 Comparator 指定的顺序,返回给定集合中的最小元素

  20.         //int frequency(Collection,Object):返回指定集合中指定元素的出现次数

  21.         System.out.println(Collections.frequency(list, 111));  // 1

  22.         // 错误的写法

  23.         //void copy(List dest,List src):将src中的内容复制到dest中

  24.         //ArrayList dest  = new ArrayList();

  25.         //Collections.copy(dest, list); // IndexOutOfBoundsException: Source does not fit in dest

  26.         List dest = Arrays.asList(new Object[list.size()]);

  27.         Collections.copy(dest, list);

  28.         System.out.println(dest);  // [111, 222, 444, 333]

  29.         //boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值

  30.         Collections.replaceAll(list, 111888);

  31.         System.out.println(list);  // [888, 222, 444, 333]

  32.     }

  33. }

2.3 线程安全方法

Collections 类中提供了多个 synchronizedXxx() 方法,

该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题

  1. //collectionstool2.java

  2. package com.ylaihui.setitf;

  3. import java.util.ArrayList;

  4. import java.util.Collections;

  5. import java.util.List;

  6. public class collectionstool2 {

  7.     public static void main(String[] args) {

  8.         ArrayList list = new ArrayList();

  9.         list.add(111);

  10.         list.add(222);

  11.         list.add(444);

  12.         list.add(333);

  13.         // list1 是线程安全的

  14.         List list1 = Collections.synchronizedList(list);

  15.         System.out.println(list1.getClass());  // class java.util.Collections$SynchronizedRandomAccessList

  16.     }

  17. }

也就是在原有的List基础上增加了一层 synchronized 修饰

  1. static class SynchronizedRandomAccessList<E>

  2.     extends SynchronizedList<E>

  3.     implements RandomAccess {

  4.     SynchronizedRandomAccessList(List<E> list) {

  5.         super(list);

  6.     }

  7.     SynchronizedRandomAccessList(List<E> list, Object mutex) {

  8.         super(list, mutex);

  9.     }

  10.     public List<E> subList(int fromIndex, int toIndex) {

  11.         synchronized (mutex) {

  12.             return new SynchronizedRandomAccessList<>(

  13.                 list.subList(fromIndex, toIndex), mutex);

  14.         }

  15.     }



点赞 0

文章评论

欢迎您:

纸上得来终觉浅,绝知此事要躬行!

112 文章 59144 浏览 3 评论

联系我

  •   QQ:    361352119
  •  Email:  lisimmy@sina.com
  • 微信: