1. 程式人生 > >Java集合框架:Collections工具類

Java集合框架:Collections工具類

com ota article public 都是 fun 說明 i++ binary

java.util.Collections工具類提供非常多實用的方法。使得程序員操作集合類的時候更加的方便easy,這些方法都是靜態的。

整個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 <T> boolean addAll(Collection<?

super T> 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 <T> int binarySearch(List<?

extends Comparable<?

super T>> list, T key)
public static <T> int binarySearch(List<?

extends T> list, T key, Comparator<? super T> c)
利用二分法在指定的集合中查找元素,至於Comparable以及Comparator相信看過前面一些列博文的朋友應該非常清楚了。詳細的也能夠參考《Comparable與Comparator淺析》


4. sort

public static <T extends Comparable<? super T>> void sort(List<T> list) 須要泛型T類本身支持Comparable接口
public static <T> void sort(List<T> list, Comparator<? super T> 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 <T> Comparator<T> reverseOrder();返回能夠使集合反轉的比較器Comparator
  3. public static <T> Comparator<T> reverseOrder(Comparator<T> 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<String> comp2 = Collections.reverseOrder(comp);改成Comparator<String> comp2 = Collections.reverseOrder(null);執行結果:

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

7.synchronized系列

確保所封裝的集合線程安全(強同步)

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

8. unmodifiable系列

確保所封裝的集合不能改動。

  1. public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c)
  2. public static <T> Set<T> unmodifiableSet(Set<? extends T> s)
  3. public static <T> SortedSet<T> unmodifiableSortedSet(SortedSet<T> s)
  4. public static <T> List<T> unmodifiableList(List<? extends T> list)
  5. public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K, ? extends V> m)
  6. public static <K,V> SortedMap<K,V> unmodifiableSortedMap(SortedMap<K, ?

    extends V> m)


9.其它

Collections工具類的功能不止上面這些,還有諸如fill(), rotate(), max(), min()等方法。不可能一下子就能所有記住,使用的時候多查查API就可以。

參考資料:
1. 《Comparable與Comparator淺析》

Java集合框架:Collections工具類