zoukankan      html  css  js  c++  java
  • Java集合框架:Collections工具类

    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浅析

  • 相关阅读:
    【BZOJ5306】染色(HAOI2018)-容斥原理+NTT
    【BZOJ3129】方程(SDOI2013)-容斥原理+扩展Lucas定理
    【BZOJ3876】支线剧情(AHOI&JSOI2014)-有上下界费用流
    【POJ1149】PIGS-最大流+优化建模
    【BZOJ1941】Hide and Seek(SDOI2010)-KD树
    【BZOJ1834】网络扩容(ZJOI2010)-最大流+费用流+拆边
    【BZOJ1927】星际竞速(SCOI2010)-费用流+拆点
    【BZOJ4872】分手是祝愿(六省联考2017)-期望DP
    【BZOJ2879】美食节(NOI2012)-费用流+拆点+动态加边
    JQ简单图片轮播
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7258603.html
Copyright © 2011-2022 走看看