zoukankan      html  css  js  c++  java
  • 【5】Java集合排序

    一、集合排序

    数组排序:

    int[] arr={1,2,3};

    Arrays.sort(arr);

    集合排序:使用Collections类中 sort()方法对List集合进行排序

     Collections.sort(list) 

    根据元素的自然顺序对指定列表按升序进行排序

    如果是字符串或者字符数据按照Ascall码值进行排序

    二、集合排序案例

    1、整型数据如何排序 

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class IntSort {
    
        public static void main(String[] args) {
            // 对存储在List中的整型数据进行排序
            List<Integer> list=new ArrayList<Integer>();
            list.add(5);
            list.add(9);
            list.add(3);
            list.add(1);
            System.out.println("排序前:");
            for(int n:list){
                System.out.print(n+"    ");
            }
            System.out.println();
            //对List中的数据进行排序
            Collections.sort(list);
            System.out.println("排序后:");
            for(int n:list){
                System.out.print(n+"    ");
            }
    
        }
    
    }
    IntSort

    2、string数据如何排序 StringSort

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class StringSort {
    
        public static void main(String[] args) {
            // 对存放在List中的字符串进行排序
            List<String> list=new ArrayList<String>();
            list.add("orange");
            list.add("blue");
            list.add("yellow");
            list.add("gray");
            System.out.println("排序前:");
            for(String s:list){
                System.out.print(s+"   ");
            }
            System.out.println();
            Collections.sort(list);
            System.out.println("排序后:");
            for(String s:list){
                System.out.print(s+"   ");
            }
        }
    
    }
    StringSort

    三、比较器

    1、Comparator接口

    1)强行对某个对象进行整体排序的比较函数;

    2)可以将Comparator传递给sort方法(如 Collections.sort 或 Arrays.sort);

    3)int compare(T o1, T o2) 用来比较排序的两个参数:

    a. 如果 o1 < o2,返回负整数;

    b. 如果 o1 == o2,返回0;

    c. 如果 o1 > o2,返回正整数。

    4)boolean equals(Object obj) 指示某个其他对象是否“等于”此Comparator;此方法可以被Object类中的equals方法覆盖,不必重写。

    代码实例:

    public class Cat {
        private String name; //名字
        private int month; //年龄
        private String species;//品种
        
        //构造方法
        public Cat(String name, int month, String species) {
            super();
            this.name = name;
            this.month = month;
            this.species = species;
        }
        //getter与setter方法
        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;
        }
        @Override
        public String toString() {
            return "[名字:" + name + ", 年龄:" + month + ", 品种:" + species + "]";
        }
    }
    Cat
    import java.util.Comparator;
    
    public class AgeComparator implements Comparator<Cat>{
    
        @Override
        public int compare(Cat o1, Cat o2) {
            // 按年龄降序排序
            int age1=o1.getMonth();
            int age2=o2.getMonth();
            return age2-age1;
        }
    
    }
    AgeComparator
    import java.util.Comparator;
    
    public class NameComparator implements Comparator<Cat> {//对Cat进行比较
    
        @Override
        public int compare(Cat o1, Cat o2) {
            // 按名字升序排序
            String name1=o1.getName();
            String name2=o2.getName();
            int n=name1.compareTo(name2);//比较两个字符串的内容,比较结果是int类型的变量
            return n;
        }
    
    }
    NameComparator
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class CatTest {
    
        public static void main(String[] args) {
            // 按名字升序排序
            Cat huahua=new Cat("huahua",5,"英国短毛猫");
            Cat fanfan=new Cat("fanfan",2,"中华田园猫");
            Cat maomao=new Cat("maomao",3,"中华田园猫");
            List<Cat> catList=new ArrayList<Cat>();
            catList.add(huahua);
            catList.add(fanfan);
            catList.add(maomao);
            //排序前
            System.out.println("排序前:");
            for(Cat cat:catList){
                System.out.println(cat);
            }
            //按名字进行升序排序
            Collections.sort(catList, new NameComparator());
            System.out.println("按名字升序排序后:");
            for(Cat cat:catList){
                System.out.println(cat);
            }
            //按年龄进行降序排序
            Collections.sort(catList, new AgeComparator());
            System.out.println("按年龄降序排序后:");
            for(Cat cat:catList){
                System.out.println(cat);
            }
        }
    
    }
    CatTest

    2、Comparable接口

    --此接口强行对实现它的每个类的对象进行整体排序。

    --这种排序通常被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。

    --对于集合和数组排序通过调用Collections.sort和Arrays.sort方法进行排序 int compareTo(T o)方法

    --该对象小于、等于或大于指定对象(参数内对象),则分别返回负整数、零或正整数。

    代码实例:

    public class Goods implements Comparable<Goods> {
        private String id;//商品编号
        private String name;//商品名称
        private double price;//商品价格
        //构造方法
        public Goods(String id,String name,double price){
            this.id=id;
            this.name=name;
            this.price=price;
        }
    
        //getter和setter方法
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
        public String toString(){
            return "商品编号:"+id+",商品名称:"+name+",商品价格:"+price;
        }
        @Override
        public int compareTo(Goods o) {
            // 取出商品价格
            double price1=this.getPrice();
            double price2=o.getPrice();
            int n=new Double(price2-price1).intValue();
            return n;
        }
    
    }
    Goods
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class GoodsTest {
    
        public static void main(String[] args) {
            Goods g1 = new Goods("s00001", "手机", 2000);
            Goods g2 = new Goods("s00002", "冰箱", 5000);
            Goods g3 = new Goods("s00003", "电视机", 3000);
            List<Goods> goodsList = new ArrayList<Goods>();
            goodsList.add(g1);
            goodsList.add(g2);
            goodsList.add(g3);
            // 排序前
            System.out.println("排序前:");
            for (Goods goods : goodsList) {
                System.out.println(goods);
            }
            Collections.sort(goodsList);
            // 排序后
            System.out.println("排序后:");
            for (Goods goods : goodsList) {
                System.out.println(goods);
            }
    
        }
    
    }
    GoodsTest

    3、Comparator接口和Comparable接口的区别

  • 相关阅读:
    hbase-15-如何查看HFile
    Hbase-14-MemStore Flush的触发时机
    Hbase-13-MemStore
    【c++】C++中erase的用法
    Redis五种数据结构(转载)
    redis的三种集群方式 (转载)
    hbase和hive的差别是什么,各自适用在什么场景中?(转载)
    vue 数据已经更新了但是页面未更新
    uni-app配置跨域
    覆盖 web-view (uni-app)
  • 原文地址:https://www.cnblogs.com/haifeima/p/13160326.html
Copyright © 2011-2022 走看看