7.11 操作集合的工具类:Collections

7.11.1 排序操作

Collections 提供了如下方法用于对 List 集合元素进行排序:

  • static void reverse(List list):反转集合 list 中元素的顺序。
  • static void shuffle(List list):对集合 list 中的元素进行随机排序(类似于“洗牌”)。
  • static void sort(List list):根据元素的自然顺序对指定 List 集合的元素按升序进行排序。
  • static void sort(List list, Comparator c):根据指定 Comparator 产生的顺序对 List 集合的元素进行排序。
  • static void swap(List list, int i, int j):将集合 list 中 i 处元素和 j 处元素进行交换。
  • static void rotate(List list, int distance):调用该函数后,集合 list 中第 i 处的元素会变成 list 未变化前第 (i - distance) mod list.size() 处的元素,i 属于 0 到 list.size() - 1。
    • 该函数可理解为将 list 中的元素做“循环位移”动作:若 distance 是正整数,则将 list 中的元素向右循环位移 distance 位;若 distance 是负整数,则向左循环位移。
    • 例如 list 为 [a, b, c, d],调用 rotate(list, 1) 之后,list 变为 [d, a, b, c]。

7.11.2 查找、替换操作

Collections:

  • static int binarySearch(List list, Object key):使用二分搜索法搜索指定对象 key 在集合 list 中的索引。使用该方法必须保证 list 中的元素已经处于有序状态。
  • static Object max(Collection coll):根据元素的自然顺序,返回指定集合中的最大元素。
  • static Object max(Collection coll, Comparator comp):根据指定 Comparator 产生的顺序,返回给定集合的最大元素。
  • static Object min(Collection coll)
  • static Object min(Collection coll, Comparator comp)
  • static void fill(List list, Object obj):使用指定元素 obj 替换集合 list 中的所有元素。
  • static int frequency(Collection c, Object o):返回集合 c 中对象 o 出现的次数。
  • static int indexOfSubList(List source, List target):返回子 List 对象在母 List 对象中第一次出现的位置索引;如果没有,则返回 -1。
  • static int lastIndexOfSubList(List source, List target)
  • static boolean replaceAll(List list, Object oldVal, Object newVal):使用一个新值 newVal 替换集合 list 中所有的旧值 oldVal。

7.11.3 同步控制

下面示例是四个同步集合对象的创建方法:

Collection c = Collections.synchronizedCollection(new ArrayList());

List list = Collections.synchronizedList (new ArrayList());

Set s = Collections.synchronizedSet (new HashSet());

Map m = Collections.synchronizedMap (new HashMap());

7.11.4 设置不可变集合

Collections 提供了如下三类方法来返回一个不可变的集合:

  • 返回一个空的、不可变的集合对象:

    • static List emptyList()
    • static Map emptyMap()
    • static Set emptySet()
  • 返回一个只包含指定对象(只有一个或一项元素)的、不可变的集合对象:

    • static <T> List<T> singletonList(T o)
    • static <K, V> Map<K, V> singletonMap(K key, V value)
    • static <T> Set<T> singleton(T o)
  • 返回指定集合对象的不可变视图:

    • static Collection unmodifiableCollection(Collection<? extends T> c)
    • static List unmodifiableList(List<? extends T> list)
    • static <K,V> Map<K,V> unmodifiableMap(Map<? extends K,? extends V> m)
    • static Set unmodifiableSet(Set<? extends T> s)