• Java:集合工具类-Collections


    Java.util.Collections

    集合框架工具类Collections,其方法都是静态的,本身没有构造函数。

    常见方法:

    static <T extends Comparable<? super T>> void sort(List<T> list)

    package Day17;
    import java.util.*;
    public class CollectionsDemo {
        public static void main(String[] args)
        {
            sortDemo();
        }
        public static void sortDemo()
        {
            List<String> list = new ArrayList<String>();
            list.add("abcd");
            list.add("aaa");
            list.add("abzcd");
            list.add("kkk");
            list.add("qq");
            System.out.println("排序前:"+list);
            Collections.sort(list);
            System.out.println("排序后:"+list);
        }
    }

    运行结果:

    排序前:[abcd, aaa, abzcd, kkk, qq]
    排序后:[aaa, abcd, abzcd, kkk, qq]

    static <T> void sort(List<T> list,Comparator<? super T>,c)加入比较器后的sort。

    package Day17;
    import java.util.*;
    public class CollectionsDemo {
        public static void main(String[] args)
        {
            sortDemo();
        }
        public static void sortDemo()
        {
            List<String> list = new ArrayList<String>();
            list.add("abcd");
            list.add("aaa");
            list.add("abzcd");
            list.add("kkk");
            list.add("qq");
            list.add("qq");
        
            System.out.println("排序前:"+list);
            Collections.sort(list,new StrLengComparator());
            System.out.println("按照长度排序后:"+list);
        }
    }
    class StrLengComparator implements Comparator<String>
    {
        public int compare(String s1,String s2)
        {
            if(s1.length()==s2.length())
                return s1.compareTo(s2);
            return s1.length()-s2.length();
        }
    }

    运行结果:

    排序前:[abcd, aaa, abzcd, kkk, qq, qq]
    按照长度排序后:[qq, qq, aaa, kkk, abcd, abzcd]

    public static <T extends Object & Comparable<? super T>> max(Collection<? extends T> coll)根据元素的自然顺序,返回给定的Collection的最大元素。Collection中的所有元素都必须实现Comparable接口。此外,Collection中的所有元素都必须是可相互比较的(也就是,对于collection中的任意e1和e2元素,e1.caompareTo(e2)不得抛出ClassCastException)。此方法在整个collection上进行迭代,所以他需要的时间与collection的大小成正比。

    static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)使用二分搜索法搜索指定列表,以获得指定对象。(如果找不到该元素返回-index-1)

    package Day17;
    import java.util.*;
    public class CollectionsDemo {
        public static void main(String[] args)
        {
            binarySearchDemo();
    }
        public static void binarySearchDemo()
        {
            List<String> list = new ArrayList<String>();
            list.add("abcd");
            list.add("aaa");
            list.add("abzcd");
            list.add("kkk");
            list.add("qq");
            list.add("qq");
        
            System.out.println("排序前:"+list);
            int index = Collections.binarySearch(list,"abcd");//使用集合工具
            System.out.println("index="+index);
            int index_my = myBinarySearch(list,"abcd");//使用自定义的二分查找法
            System.out.println("index_my="+index_my);
            
        }
        public static int myBinarySearch(List<String> list, String key)
        {
            int max,min,mid;
            max = list.size()-1;
            min = 0;
            while (min <= max )
            {
                mid = (max + min) >> 1;
                int num = list.get(mid).compareTo(key);
                if (num>0)
                    max = mid-1;
                else if (num<0)
                    min = mid+1;
                else
                    return mid;
            }
            return -min-1;//如果找不到返回-index-1
        }
    }

    运行结果:

    排序前:[abcd, aaa, abzcd, kkk, qq, qq]
    index=0
    index_my=0

    上面如果使用自定义的比较器,则

    package Day17;
    import java.util.*;
    public class CollectionsDemo {
        public static void main(String[] args)
        {
            binarySearchDemo();
        }
        public static void binarySearchDemo()
        {
            List<String> list = new ArrayList<String>();
            list.add("abcd");
            list.add("aaa");
            list.add("abzcd");
            list.add("kkk");
            list.add("qq");
            list.add("qq");
        
            System.out.println("排序前:"+list);
            int index = Collections.binarySearch(list,"abcd");//使用集合工具
            System.out.println("index="+index);
            int index_my = myBinarySearch(list,"abcd",new StrLengComparator());//使用自定义的二分查找法
            System.out.println("index_my="+index_my);
            
        }
        public static int myBinarySearch(List<String> list, String key,Comparator cmp)
        {
            int max,min,mid;
            max = list.size()-1;
            min = 0;
            while (min <= max )
            {
                mid = (max + min) >> 1;
                int num = cmp.compare(list.get(mid),key);
                if (num>0)
                    max = mid-1;
                else if (num<0)
                    min = mid+1;
                else
                    return mid;
            }
            return -min-1;//如果找不到返回-index-1
        }
    }
    class StrLengComparator implements Comparator<String>
    {
        public int compare(String s1,String s2)
        {
            if(s1.length()==s2.length())
                return s1.compareTo(s2);
            return s1.length()-s2.length();
        }
    }

    static <T> void fill(List<? super T> list, T obj>)使用指定元素替换指定列表中的所有元素。

    package Day17;
    import java.util.*;
    
    public class CollectionsDemo2 {
        public static void main(String[] args){
            List<String> list = new ArrayList<String>();
            list.add("abcd");
            list.add("aaa");
            list.add("zz");
            list.add("kkkk");
            System.out.println("使用fill前:"+list);
            Collections.fill(list, "pp");
            System.out.println("使用fill后:"+list);
        }
    }

    运行结果:

    使用fill前:[abcd, aaa, zz, kkkk]
    使用fill后:[pp, pp, pp, pp]

    static <T> boolean replaceAll(List<T> list, T oldVal, T newVal),将List集合中的指定元素替换成新元素。

    package Day17;
    import java.util.*;
    
    public class CollectionsDemo2 {
        public static void main(String[] args){
            List<String> list = new ArrayList<String>();
            list.add("abcd");
            list.add("aaa");
            list.add("zz");
            list.add("kkkk");
            System.out.println("使用replaceAll前:"+list);
            //Collections.fill(list, "pp");
            //System.out.println("使用fill后:"+list);
            Collections.replaceAll(list,"aaa","zzz");
            System.out.println("使用replaceAll后:"+list);
        }
    }

    运行结果:

    使用replaceAll前:[abcd, aaa, zz, kkkk]
    使用replaceAll后:[abcd, zzz, zz, kkkk]

    static <T> Comparator <T> reverseOrder(),返回一个比较器,可以强行逆转使用了Comparable接口的对象collection的自然排序。

    未使用reverseOrder前:

    package Day17;
    import java.util.*;
    
    public class CollectionsDemo3 {
        public static void main(String[] args){
            TreeSet<String> ts = new TreeSet<String>();
            ts.add("abcde");
            ts.add("aaa");
            ts.add("kkk");
            ts.add("ccc");
            for (Iterator it = ts.iterator(); it.hasNext(); ){
                System.out.println(it.next());
            }
        }
    }
    运行结果:
    aaa
    abcde
    ccc
    kkk

    使用reverseOrder后:

    package Day17;
    import java.util.*;
    
    public class CollectionsDemo3 {
        public static void main(String[] args){
            TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());
            ts.add("abcde");
            ts.add("aaa");
            ts.add("kkk");
            ts.add("ccc");
            for (Iterator it = ts.iterator(); it.hasNext(); ){
                System.out.println(it.next());
            }
        }
    }
    运行结果:
    kkk
    ccc
    abcde
    aaa

    并且该方法的重载方法static <T> Collection<T> reverseOrder(Comparator<T> cmp),可以强行逆转指定比较器的顺序。

    static <T> List<T> synchronizedList(List<T> list),返回指定列表的线程同步(线程安全)的列表。

  • 相关阅读:
    【原】相煎何太急——input的blur事件与button的click事件
    【原】jQuery与CSS自动生成验证码
    【转】HTML转义字符大全
    【原】来自于一位前端“布道者”的建议
    【原】如何在jQuery中实现闭包
    【转】Web前端研发工程师编程能力飞升之路
    【原】git如何删除本地和远程的仓库
    H5不同样式新闻垂直滚动效果
    mui防止软键盘弹起方法
    js显示对象所有属性和方法的函数
  • 原文地址:https://www.cnblogs.com/siyingcheng/p/4364466.html
Copyright © 2020-2023  润新知