Java集合框架:Collections工具类

java.util.Collections工具类提供很多有用的方法,使得程序猿操作集合类的时候更加的方便容易,这些方法都是静态的。整个Collections工具类源码差不多有4000行,我们针对一些典型的方法进行阐述。


1. 调用一个空List,Set,Map

public static final List EMPTY_LIST = new EmptyList<>();
public static final Map EMPTY_MAP = new EmptyMap<>();
public static final Set EMPTY_SET = new EmptySet<>();

2. addAll

public static boolean addAll(Collection c, T… elements):向指定的集合c中加入特定的一些元素elements
案例2-1:

        List<String> list = new ArrayList<>();
        list.add("s2");
        list.add("s4");
        list.add("s1");
        list.add("s3");
        System.out.println(list);
        Collections.addAll(list, "s5","s7",null,"s9");
        System.out.println(list);

运行结果:

[s2, s4, s1, s3]
[s2, s4, s1, s3, s5, s7, null, s9]

3. binarySearch

public static int binarySearch(List> list, T key)
public static int binarySearch(List list, T key, Comparator c)
利用二分法在指定的集合中查找元素,至于Comparable以及Comparator相信看过前面一些列博文的朋友应该很清楚了,具体的也可以参考《Comparable与Comparator浅析》


4. sort

public static > void sort(List list) 需要泛型T类本身支持Comparable接口
public static void sort(List list, Comparator c)
具体举例可以参考《Comparable与Comparator浅析》


5. shuffle

public static void shuffle(List list)
public static void shuffle(List list, Random rnd)
混排。混排算法所做的正好与sort相反:它打乱在一个List中可能有的任何排列的踪迹。也就是说,基于随机源的输入重排list,这样的排列具有相同的可能性(假设随机源是公正的)。这个算法在实现一个碰运气的Game中非常有用。
案例5-1:

    public static void test3()
    {
        List<String> list = new ArrayList<>();
        list.add("s1");
        list.add("s2");
        list.add("s3");
        list.add("s4");
        Collections.shuffle(list);
        System.out.println(list);
    }

每次运行结果都不同。


6. 反转

有关反转主要有这三个方法:

  1. public static void reverse(List list)直接反转集合的元素
  2. public static Comparator reverseOrder();返回可以使集合反转的比较器Comparator
  3. public static Comparator reverseOrder(Comparator cmp);如果cmp不为null,返回cmp的反转的比较器,即集合的反转的反转,最后就是没反转。如果cmp为null,效果等同于第二个方法.

举几个案例来说明下用法。
案例6-1:

        List<String> list = new ArrayList<>();
        list.add("s1");
        list.add("s2");
        list.add("s3");
        list.add("s4");
        System.out.println(list);
        Collections.reverse(list);
        System.out.println(list);

运行结果:

[s1, s2, s3, s4]
[s4, s3, s2, s1]

案例6-2:

        List<String> list = new ArrayList<>();
        list.add("s1");
        list.add("s2");
        list.add("s3");

        System.out.println(list);

        Comparator<String> comp = Collections.reverseOrder();
        Collections.sort(list,comp);
        System.out.println(list);

运行结果:(同上)
案例6-3:

        List<String> list = new ArrayList<>();
        list.add("s1");
        list.add("s2");
        list.add("s3");
        list.add("s4");
        System.out.println(list);

        Comparator<String> comp = Collections.reverseOrder();
        Collections.sort(list,comp);
        System.out.println(list);

        Comparator<String> comp2 = Collections.reverseOrder(comp);
        Collections.sort(list,comp2);
        System.out.println(list);

运行结果:

[s1, s2, s3, s4]
[s4, s3, s2, s1]
[s1, s2, s3, s4]

如果把Comparator comp2 = Collections.reverseOrder(comp);改成Comparator comp2 = Collections.reverseOrder(null);运行结果:

[s1, s2, s3, s4]
[s4, s3, s2, s1]
[s4, s3, s2, s1]

7.synchronized系列

确保所封装的集合线程安全(强同步)

  1. public static Collection synchronizedCollection(Collection c)
  2. public static SortedSet synchronizedSortedSet(SortedSet s)
  3. public static List synchronizedList(List list)
  4. public static Map synchronizedMap(Map m)
  5. public static SortedMap synchronizedSortedMap(SortedMap m)
  6. public static SortedSet synchronizedSortedSet(SortedSet s)

8. unmodifiable系列

确保所封装的集合不能修改。

  1. public static Collection unmodifiableCollection(Collection c)
  2. public static Set unmodifiableSet(Set s)
  3. public static SortedSet unmodifiableSortedSet(SortedSet s)
  4. public static List unmodifiableList(List list)
  5. public static Map unmodifiableMap(Map m)
  6. public static SortedMap unmodifiableSortedMap(SortedMap m)

9.其他

Collections工具类的功能不止上面这些,还有诸如fill(), rotate(), max(), min()等方法,不可能一下子就能全部记住,使用的时候多查查API即可。

参考资料:
1. 《Comparable与Comparator浅析》

你可能感兴趣的:(Java集合框架:Collections工具类)