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

集合排序

  • 使用Collections类的sort()方法
  • sort(List list) 根据元素的自然顺序对指定列表按升序进行排序。
  • 通过Collections.sort中实现comparator 接口对自定义对象进行排序

对整形数据进行排序

package com.alan.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class IntSort {

    public static void main(String[] args) {
        // 对存储在List中对整形数据进行排序
        // 定义泛型只能为对象,这里对int使用相应的装箱对象Integer,输入整数时会自动装箱
        List list = new ArrayList();
        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();
        //使用Collections类对数据进行排序
        Collections.sort(list);
        System.out.println("排序后:");
        for(int n:list) {
            System.out.print(n+" ");
        }

    }

}

对字符串进行排序

package com.alan.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class StringSort {

    public static void main(String[] args) {
        // 对存放在List中的字符串进行排序
        List list = new ArrayList();
        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 + " ");
        }

    }

}

Comparator接口介绍

  • 强行对某个对象进行整体排序的比较函数。
  • 可以将Comparaotr传递给sort方法

对自定义宠物猫类分别按名字升序、年龄降序进行排列

  • 首先定义宠物猫类
package com.alan.sort;

public class Cat {
    
    //属性:名字、年龄、品种
    private String name;
    private int month;
    private String species;
    
    //无参构造
    public Cat() {
        
    }
    //带参构造
    public Cat(String name, int month, String species) {
        this.name = name;
        this.month = month;
        this.species = 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;
    }
    
    //由于使用了HashSet这里重写ToString方法
    @Override
    public String toString() {
        return "[名字:" + name + ", 年龄:" + month + ", 品种:" + species +"]";
    }
}

  • 按名字排序重写Comparator中的compare方法
package com.alan.sort;

import java.util.Comparator;

public class NameComparator implements Comparator {

    @Override
    public int compare(Cat o1, Cat o2) {
        // 按照名字升序进行排序
        String name1 = o1.getName();
        String name2 = o2.getName();
        int n = name1.compareTo(name2);
        return n;
    }

}

  • 按年龄排序重写Comparator中的compare方法
package com.alan.sort;

import java.util.Comparator;

public class AgeComparator implements Comparator {

    @Override
    public int compare(Cat o1, Cat o2) {
        // 按照宠物猫的年龄进行降序排序
        int age1 = o1.getMonth();
        int age2 = o2.getMonth();
        //方法一:逻辑运算复杂
//      if (age1 > age2) {
//          return -1;
//      } else if (age1 < age2) {
//          return 1;
//      } else {
//          return 0;
//      }
        //方法二:
        return age2-age1;

    }

}

  • 排序实现主方法
package com.alan.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CatSort {

    public static void main(String[] args) {
        // 对宠物猫对象进行排序
        Cat huahua = new Cat("huahua", 2, "英国短毛猫");
        Cat fanfan = new Cat("fanfan", 5, "中华田园猫");
        Cat maomao = new Cat("maomao", 3, "中华田园猫");
        // 通过ArrayList存放Cat对象
        List catList = new ArrayList();
        catList.add(huahua);
        catList.add(fanfan);
        catList.add(maomao);
        System.out.println("按名字升序排序前:");
        for (Cat cat : catList) {
            System.out.println(cat);
        }
        // 通过重写Collections中的Comparatror接口的compara方法。对其进行排序
        Collections.sort(catList, new NameComparator());
        System.out.println("按名字升序排序后:");
        for (Cat cat : catList) {
            System.out.println(cat);
        }
        
        //调用AgeComparator类,实现按年龄降序排序
        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);
        }
    }

}

Comparable接口

  • 此接口强行对实现它的每个类的对象进行整体排序。
  • 这种排序被称为类的自然排序,类的 compareTo 方法被称为它
    的自然比较方法。
  • 对于集合,通过调用Collections.sort方法进行排序。
  • 对于数组,通过调用Arrays.sort方法进行排序。
  • 定义要实现的类的同时就实现了Comparable接口

使用Comparable接口对商品价格进行降序排列

  • 定义商品类,同时重写Comparable接口中的compareTo方法
package com.alan.sort;

public class Goods implements Comparable {
    
    //属性:商品编号、商品名称、商品价格
    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;
    }
    
    
    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;
    }


    @Override
    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();
        int n = (int) (price2-price1);
        return n;
    }
}

  • 主方法中实现按商品价格降序排序
package com.alan.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class GoodsTest {

    public static void main(String[] args) {
        // 对商品对价格进行降序排列
        Goods goods1 = new Goods("goods001","手机",888.88);
        Goods goods2 = new Goods("goods002","手表",588.88);
        Goods goods3 = new Goods("goods003","电脑",1888.88);
        
        //将商品存放到ArrayList中
        List goodsList = new ArrayList();
        goodsList.add(goods1);
        goodsList.add(goods2);
        goodsList.add(goods3);
        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);
        }
        

    }

}
image.png

你可能感兴趣的:(Java 常用工具类--集合排序)