Java 集合:(三十一)Collections 工具类

一、Collections 工具类

  1、Collections 是一个操作 Set、List 和 Map 等集合的工具类。

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

  3、

  4、

  5、

二、Collections 方法列表

  

三、常用方法说明

  1、排序操作

public static void reverse(List<?> list) {}  反转 List 中元素的顺序

public static void shuffle(List<?> list) {}  对 List 集合元素进行随机排序

public static void shuffle(List<?> list, Random rnd) {} 对 List 集合元素进行随机排序

public static void swap(List<?> list, int i, int j) {}  将指定 list 集合中的 i 处元素和 j 处元素进行交换

public static <T extends Comparable<? super T>> void sort(List<T> list) {}  对List集合元素按照默认规则进行排序(默认升序)

public static <T> void sort(List<T> list, Comparator<? super T> c) {}  根据指定的 Comparator 产生的顺序对 List 集合元素进行排序

public static void rotate(List<?> list, int distance)//旋转。当distance为正数时,将list后distance个元素整体移到前。当distance为负数时,将 list的前distance个元素整体移到后

    注意:被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序的规则。

  2、查找、替换

public static <T> void fill(List<? super T> list, T obj) {}  将List集合中填充为 obj

public static <T> void copy(List<? super T> dest, List<? extends T> src) {} 复制 src 到 dest

public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) {}  根据元素的自然顺序,返回给定集合中的最小元素
public static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp) {}             根据指定的比较器,返回给定集合中的最大元素
 
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {}  根据元素的自然顺序,返回给定集合中的最大元素
public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) {}  			 根据指定的比较器,返回给定集合中的最大元素


public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) {}  使用新值替换List 对象的所有旧值

public static int frequency(Collection<?> c, Object o) {}  返回指定集合中指定元素的出现次数

int binarySearch(List list, Object key)//对List进行二分查找,返回索引,注意List必须是有序的
int indexOfSubList(List list, List target)//统计target在list中第一次出现的索引,找不到则返回-1,类比 int lastIndexOfSubList(List source, list target).

  

    copy方法测试:

 1     @Test
 2     public void test2(){
 3         List list = new ArrayList();
 4         list.add(123);
 5         list.add(43);
 6         list.add(765);
 7         list.add(-97);
 8         list.add(0);
 9 
10         //报异常:IndexOutOfBoundsException("Source does not fit in dest")
11         //List dest = new ArrayList();
12         //Collections.copy(dest,list);
13         //正确的:
14         List dest = Arrays.asList(new Object[list.size()]);
15         System.out.println(dest.size());//list.size();
16         Collections.copy(dest,list);
17 
18         System.out.println(dest);    
19     }

  3、空集合

    当操作一个方法时,如果返回的集合是一个空对象,并不应该返回 null,而是应该返回一个空集合。

    Collections 给我们提供了几种返回空集合的方法:

public static final <T> Set<T> emptySet() {}
public static <E> SortedSet<E> emptySortedSet() {}
public static final <T> List<T> emptyList() {}
public static final <K,V> Map<K,V> emptyMap() {}
public static final <K,V> SortedMap<K,V> emptySortedMap() {}

  

  4、同步控制

Collections 类中提供了多个 synchronizedXxx() 方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。
 
 
public static <T> Collection<T> synchronizedCollection(Collection<T> c) {]
static <T> Collection<T> synchronizedCollection(Collection<T> c, Object mutex) {}
public static <T> Set<T> synchronizedSet(Set<T> s) {}
static <T> Set<T> synchronizedSet(Set<T> s, Object mutex) {}
public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s) {}
public static <T> NavigableSet<T> synchronizedNavigableSet(NavigableSet<T> s) {}
public static <T> List<T> synchronizedList(List<T> list) {}
static <T> List<T> synchronizedList(List<T> list, Object mutex) {}
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {}
public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m) {}
public static <K,V> NavigableMap<K,V> synchronizedNavigableMap(NavigableMap<K,V> m) {}

    我们知道 HashSet , TreeSet , ArrayList , LinkedList , HashMap , TreeMap 都是线程不安全的。
    Collections 提供了多个静态⽅法可以把他们包装成线程同步的集合。
    最好不要⽤下⾯这些⽅法,效率⾮常低,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合。

  5、补充:Enumeration

    Enumeration 接口是 Iterator 迭代器的 “古老版本”

    案例:

1 Enumeration stringEnum = new StringTokenizer("a-b*c-d-e-g", "-");
2 while(stringEnum.hasMoreElements()){
3     Object obj = stringEnum.nextElement();
4     System.out.println(obj); 
5 }

四、

五、

六、

原文地址:https://www.cnblogs.com/niujifei/p/14798903.html