继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

5-Java常用工具类-集合排序

慕哥9229398
关注TA
已关注
手记 1245
粉丝 199
获赞 913

Java工具类中提供了两种方法来排序:

java.util.Collections.sort(java.util.List)

java.util.Collections.sort(java.util.List, java.util.Comparator)

package cn.mtianyan.sort;public class Cat implements Comparable{    private String name; //名字
    private int month; //年龄
    private String species;//品种

    @Override
    public String toString() {        return "[姓名:" + name + ", 年龄:" + month + ", 品种:" + species + "]";
    }    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public int getMonth() {        return month;
    }    public void setMonth(int month) {        this.month = month;
    }    public String getSpecies() {        return species;
    }    public void setSpecies(String species) {        this.species = species;
    }    public Cat(String name, int month, String species) {        this.name = name;        this.month = month;        this.species = species;
    }    @Override
    public int compareTo(Object o) {        return this.month-((Cat)o).month;
    }
}
package cn.mtianyan.sort;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class CatTest{    public static void main(String[] args) {
        List<Cat> list = new ArrayList<>();        // 定义宠物猫对象
        Cat huahua = new Cat("花花", 12, "英国短毛猫");
        Cat fanfan = new Cat("凡凡", 3, "中华田园猫");
        Cat huahua02 = new Cat("花花二代", 2, "英国短毛猫");
        list.add(huahua);
        list.add(fanfan);
        list.add(huahua02);
        System.out.println("排序前宠物猫信息");        for (Cat cat: list) {
            System.out.println(cat);
        }        // 执行排序操作
        Collections.sort(list); // Cat必须实现Comparable接口,并实现其方法
        System.out.println("按年龄从大到小排序之后宠物猫信息");        for (Cat cat: list) {
            System.out.println(cat);
        }
    }
}

使用Collection.sort方法来进行排序,被排序对象必须实现Comparable接口,并重写compareTo方法

 @Override
    public int compareTo(Object o) {        return this.month-((Cat)o).month;
    }

将此对象与指定的对象进行比较以进行排序。 返回一个负整数,零或正整数,分别对应该对象小于,等于或大于指定对象。

比如猫的例子,第一个12与第二个3进行比较。12-3=9是大于的。
下图提示语有错误: 应该为从小到大。

5c13489100018b7703770207.jpg

名字字符串排序

 @Override
    public int compareTo(Object o) {        return ((Cat)o).name.compareTo(this.name);
    }
  // 定义宠物猫对象
        Cat huahua = new Cat("aa", 12, "英国短毛猫");
        Cat fanfan = new Cat("bb", 3, "中华田园猫");
        Cat huahua02 = new Cat("cc", 2, "英国短毛猫");

运行结果:

5c13489200013e0203580199.jpg

Collections.sort(List list, Comparator<T> comparator)

package cn.mtianyan.sort;public class CatTwo {    private String name; //名字
    private int month; //年龄
    private String species;//品种

    @Override
    public String toString() {        return "[姓名:" + name + ", 年龄:" + month + ", 品种:" + species + "]";
    }    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public int getMonth() {        return month;
    }    public void setMonth(int month) {        this.month = month;
    }    public String getSpecies() {        return species;
    }    public void setSpecies(String species) {        this.species = species;
    }    public CatTwo(String name, int month, String species) {        this.name = name;        this.month = month;        this.species = species;
    }
}
package cn.mtianyan.sort;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class CatTwoTest {    public static void main(String[] args) {
        List<CatTwo> list = new ArrayList<>();        // 定义宠物猫对象
        CatTwo huahua = new CatTwo("aa", 12, "英国短毛猫");
        CatTwo fanfan = new CatTwo("bb", 3, "中华田园猫");
        CatTwo huahua02 = new CatTwo("cc", 2, "英国短毛猫");
        list.add(huahua);
        list.add(fanfan);
        list.add(huahua02);
        System.out.println("排序前宠物猫信息");        for (CatTwo cat: list) {
            System.out.println(cat);
        }
        Comparator<CatTwo> comparator = new Comparator<CatTwo>() {            @Override
            public int compare(CatTwo o1, CatTwo o2) {                return o1.getMonth() - o2.getMonth();
            }
        };

        Collections.sort(list,comparator);
        System.out.println("排序后宠物猫信息(按月份从小到大)");        for (CatTwo cat: list) {
            System.out.println(cat);
        }
    }
}

运行结果:

5c1348920001c97803570198.jpg

字符串名字从大到小

            @Override
            public int compare(CatTwo o1, CatTwo o2) {//                return o1.getMonth() - o2.getMonth();
                return o2.getName().compareTo(o1.getName());
            }
        };

        Collections.sort(list,comparator);
        System.out.println("排序后宠物猫信息(按名字从大到小)");

运行结果:

5c1348920001d7e303640210.jpg

package cn.mtianyan.sort;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;public class SortArray {    public static void main(String[] args) {
        Character [] charArray = new Character[]{'m','t','i','a','n','y','a','n'};
        List<Character> list = Arrays.asList(charArray);

        System.out.println("====Character排序前====");        for (Character character:list) {
            System.out.print(character+" ");
        }



        System.out.println();
        System.out.println("====Character正序排序后====");
        Collections.sort(list);        for (Character character:list) {
            System.out.print(character+" ");
        }

        System.out.println();
        System.out.println("====Character逆序排序后====");
        Collections.sort(list,Collections.reverseOrder());        for (Character character:list) {
            System.out.print(character+" ");
        }

        String [] stringArray = new String[]{"yes","ha","mtianyan","ab"};
        System.out.println();
        List<String> list1 = Arrays.asList(stringArray);
        System.out.println("====String排序前====");        for (String string:list1) {
            System.out.print(string+" ");
        }
        System.out.println();
        Collections.sort(list1);
        System.out.println("====String正序排序后====");        for (String string:list1) {
            System.out.print(string+" ");
        }
        Comparator cmp1 = Collections.reverseOrder();
        Collections.sort(list1,cmp1);
        System.out.println();
        System.out.println("====String逆序排序后====");        for (String string:list1) {
            System.out.print(string+" ");
        }

        Integer[] intArray = new Integer[]{8,6,3,4,7,5,1};
        List<Integer> list2 = Arrays.asList(intArray);
        System.out.println();
        System.out.println("====Integer排序前====");        for (Integer integer:list2) {
            System.out.print(integer+" ");
        }
        System.out.println();
        System.out.println("====Integer正序排序后====");
        Collections.sort(list2);        for (Integer integer:list2) {
            System.out.print(integer+" ");
        }
        System.out.println();
        System.out.println("====Integer逆序排序后====");
        Collections.sort(list2,Collections.reverseOrder());        for (Integer integer:list2) {
            System.out.print(integer+" ");
        }
    }
}

运行结果:

5c1348920001e3d203640373.jpg

package cn.mtianyan.sort;import java.util.HashSet;import java.util.Set;import java.util.concurrent.ConcurrentSkipListSet;public class SortedMap {    public static void main(String[] args) {

        Set<String> set =  new HashSet<>();
        set.add("ccc");
        set.add("ddd");
        set.add("eee");
        set.add("aaa");
        set.add("bbb");        for (String string:set){
            System.out.println(string);
        }
        System.out.println("=============");
        ConcurrentSkipListSet<String> concurrentSkipListSet = new ConcurrentSkipListSet<>();
        concurrentSkipListSet.add("ccc");
        concurrentSkipListSet.add("ddd");
        concurrentSkipListSet.add("eee");
        concurrentSkipListSet.add("aaa");
        concurrentSkipListSet.add("bbb");        for (String string:concurrentSkipListSet) {
            System.out.println(string);
        }
    }
}

运行结果:

5c1348920001147703560260.jpg



作者:天涯明月笙
链接:https://www.jianshu.com/p/6e47c68476d6


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP