首页 > 编程语言 > 详细

Java:集合工具类-Collections

时间:2015-03-25 00:55:57      阅读:293      评论:0      收藏:0      [点我收藏+]

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),返回指定列表的线程同步(线程安全)的列表。

Java:集合工具类-Collections

原文:http://www.cnblogs.com/siyingcheng/p/4364466.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!