Collections集合工具类

Collections作为集合的工具类,提供了哪些比较好的方法?

下面一一进行介绍

(一). 排序方法

1)sort(List list)按照自然顺序排序
2)sort(List list , Comparator)按照指定比较器排序
3)可以对相同元素进行排序,因为序列号不一样。
4)此方法只限定用于List集合,而不用于Set集合,因为Set有TreeSet可以排序

示例1:

自然排序

import java.util.*;
class CollectionsDemo1
{
    public static void main(String args[])
    {
        sortDemo();
    }
    public static void sortDemo()
    {
        List<String> list = new ArrayList<String>();
        list.add("sfdff");
        list.add("sf");
        list.add("xfd");
        list.add("rtrt");
        list.add("sf");

        sop(list);
        Collections.sort(list);
        sop(list);

    }
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}

示例2:

利用比较器排序。

import java.util.*;
class CollectionsDemo1
{
    public static void main(String args[])
    {
        sortDemo();
    }
    public static void sortDemo()
    {
        List<String> list = new ArrayList<String>();
        list.add("sfdff");
        list.add("sf");
        list.add("xfd");
        list.add("rtrt");
        list.add("sf");

        sop(list);
        Collections.sort(list,new StrLenComparator());
        sop(list);

    }
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}
class StrLenComparator implements Comparator<String>
{
    public int compare(String s1,String s2)
    {
        if(s1.length()>s2.length())
        {
            return 1;
        }
        if(s1.length()<s2.length())
        {
            return -1;
        }
        return s1.compareTo(s2);
    }
}

练习1 :

求最大值

public static void maxDemo()
    {
        List<String> list = new ArrayList<String>();
        list.add("sfdff");
        list.add("sf");
        list.add("xfd");
        list.add("rtrt");
        list.add("sf");

        sop(list);
        Collections.max(list);//最大值
        sop(list);
        Collections.max(list,new StrLenComparator());//字符串长度最长的。
        sop(list);

    }

(二). 二分法查找binarySearch()

1)按自然顺序排列;
2)指定比较器进行排序。
3)二分法查找之前,必须对集合进行排序,否则无法进行。

示例3:

public static void binarySearchDemo()
    {
        List<String> list = new ArrayList<String>();
        list.add("sfdff");
        list.add("sf");
        list.add("xfd");
        list.add("rtrt");
        list.add("sf");
        Collections.sort(list);

        sop(list);

        int index = Collections.binarySearch(list,"xfd");//返回排序的位置。
        sop("index:"+index);
        int index = Collections.binarySearch(list,"xfdd");//如果不存在,则返回插入点-n-1的值

    }

(三). fill(list,str)方法

1)作用:将list中的所以元素替换成指定元素str

示例4:

将List中的部分元素替换成指定元素。

public static void fillDemo()
    {
        List<String> list = new ArrayList<String>();
        list.add("sfdff");
        list.add("sf");
        list.add("xfd");
        list.add("rtrt");
        list.add("sf");

        sop(list);

        Collections.fill(list,"qq");//将集合中的所有元素替换为同一个元素。
        sop(list);
    }

(四). 替换和翻转

1)替换replaceAll(list,oldValue,newValue):替换集合中个别元素。
2)翻转reverse(list):与原集合顺序倒过来。

示例5:

public static void replaceAlldemo()
    {
        List<String> list = new ArrayList<String>();
        list.add("sfdff");
        list.add("sf");
        list.add("xfd");
        list.add("rtrt");
        list.add("sf");

        sop(list);

        Collections.replaceAll(list,"sf","qq");
        sop(list);
        Collections.reverse(list);
        sop(list);
    }

(五). 倒序Collections.reverseOrder()

1)返回值为一个比较器;
1)不传入参数,返回自然顺序的翻转比较器;
2)可以传入一个特定比较器,返回值为此比较器的翻转比较器,可以实现倒序排序。

示例6:

自然顺序的翻转比较器

import java.util.*;
class CollectionsDemo1
{
    public static void main(String args[])
    {
        maxDemo();
    }
    public static void orderDemo()
    {
        TreeSet<String> list = new TreeSet<String>(Collections.reverseOrder());
        list.add("aaa");
        list.add("ds");
        list.add("g");
        list.add("kkkk");

        sop(list);
    }

示例7:

已知比较器的翻转

import java.util.*;
class CollectionsDemo1
{
    public static void main(String args[])
    {
        maxDemo();
    }
    public static void orderDemo()
    {
        TreeSet<String> list = new TreeSet<String>(Collections.reverseOrder(new LenComparator()));
        list.add("aaa");
        list.add("ds");
        list.add("g");
        list.add("kkkk");

        sop(list);
    }
}

class LenComparator extends Comparator<String>
{
    public boolean compare(String o1,String o2)
    {
        int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));//如果倒序则调换o1,o2的位置。
        if(num==0)
        {
            return o1.compareTo(o2);
        }
        return num;
    }
}

(六). 把不同步的集合转换为同步的集合

示例8:

public static void shuffleDemo
    {

        List<String> list = new ArrayList<String>();
        list.add("sfdff");
        list.add("sf");
        list.add("xfd");
        list.add("rtrt");
        list.add("sf");

        sop(list);

        Collections.shuffle(list);//能够把不同步的集合转换为同步的集合,例子相当于执行一次洗牌一次。
        sop(list);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值