第一种:;利用冒泡排序,创建一个 可以接收任意类型参数 和 自定义排序规则的 方法
第一步,创建冒泡排序
import java.util.ArrayList;
//创建一个SorUilt类,并加入一个泛型参数
public class SortUilt <Y>{
//定义一个返回ArrayList值的方法,要求传入需要排序ArrayList,和一个自定义方法
public ArrayList<Y> sortList(ArrayList<Y> list,ComparerTo cmp){
//利用for循环进行比较和重新排序
for (int i = 0; i <list.size()-1 ; i++) {
for (int j = 0; j <list.size()-1-i ; j++) {
//自己定义排序方法 和 排序规则,然后传回一个boolean值
boolean result = cmp.Comparer(list.get(j),list.get(j+1));
//如果为true 则俩个排序对象交换位置
if (result){
Y tmp = list.get(j);
list.set(j,list.get(j+1));
list.set(j+1,tmp);
}
}
}
return list;
}
}
第二步,创建一个自定义拥有范型参数的接口,添加一个方法,用来自定义排序规则
// 定义一个有范型参数的interface类,并规定一个返回boolean值的Comparer方法
public interface ComparerTo <T>{
public boolean Comparer(T t1,T t2);
}
第三步,实现第二步接口中的方法,完善自定义排序规则
//实现ComparerTo接口方法,并输入一个需要进行排序的参数类型,我这里传入的Product
public class ComparerToImpl implements ComparerTo <Product>{
@Override
//传入俩个Product对象进行自定义比较
public boolean Comparer(Product t1, Product t2) {
//如果t1的价格比t2小,则返回true否则返回false
if (t1.getPdtPrice() < t2.getPdtPrice()){
return true;
}
return false;
}
}
第四步,创建一个测试类,用来调用排序方法
public static void main(String[] args) throws Exception{
//创建一个自定义类型的ArrayList
ArrayList<Product> pdtList = new ArrayList<>();
//新建一个SortUilt对象sortUilt 注:SortUilt为之前创建的类,里面放着排序规则
SortUilt<Product> sortUilt = new SortUilt<>();
//调用sortUilt中的sortList方法,并传入ArrayList参数,和 ComparerTo接口的实现类
sortUilt.sortList(pdtList,new ComparerToImpl());
第二种:利用JAVA中现成的 排序接口 Comparable,然后实现接口方法,加入自己想要实现的排序规则
第一步:创建一个对象,并为这个对象赋予一些可以进行比较的属性,导入Comparerble接口,并实现接口中的方法,在方法中自定义排序规则
//创建一个Product类,并赋予独特的属性,导入Comparerble接口
public class Product implements Comparable<Product>{
private String pdtId;
private String pdtName;
private int pdtNumber;
private float pdtPrice;
public Product(){
}
//自己定义的一个方法,用来获取Product对象 的订单总金额 = 数量 * 价格
public float getAmountPrice(){
float amount = (float) this.pdtNumber * this.pdtPrice;
return amount;
}
//实现Comparerble接口的方法,方法返回值为int类型,规定:大于返回1,等于返回0,小于返回-1
@Override
public int compareTo(Product o) {
//自定义排序规则
if (this.getAmountPrice() < o.getAmountPrice()){
return 1;
}
return -1;
第二步,检验方法是否可用
public class txtClass {
//新创建一个类,来看看自定义Comparerble方法是否好用
public static void main(String[] args) throws Exception{
//创建一个ArrayList用来装Product对象
ArrayList<Product> pdts = new ArrayList<>();
//创建几个Product对象数据,用来排序
pdts.add(new Product("p1","苹果",3.5f,5));
pdts.add(new Product("p2","香蕉",2.5f,10));
pdts.add(new Product("p3","梨",4.2f,3));
//调用上一步定义好的的Conparerble接口方法
Collections.sort(pdts);
//输出排序后的数组结果
for (Product pdt:pdts) {
//直接输出的话,需要在Product中加入toString方法噢,要不然需要单个属性打印~~~
System.out.println(pdt);
}
}
第三种:直接调用Collections中的sort方法,这个方法需要你传入一个你要排序的数组,和定义他附带的一个接口,你可以在接口中 去编辑自己喜欢的排序规则
public class txtClass {
//新创建一个类,来看看自定义Comparerble方法是否好用
public static void main(String[] args) throws Exception{
//创建一个ArrayList用来装Product对象
ArrayList<Product> pdts = new ArrayList<>();
//创建几个Product对象数据,用来排序
pdts.add(new Product("p1","苹果",3.5f,5));
pdts.add(new Product("p2","香蕉",2.5f,10));
pdts.add(new Product("p3","梨",4.2f,3));
//调用Collections中的sort方法,这个方法需要你传入一个待排序的数组,并需要你在他附带的排序接口中去定义排序规则
//相比较前俩种方法,这种方法是我最喜欢用的,哈哈
Collections.sort(pdts, new Comparator<Product>() {
@Override
public int compare(Product o1, Product o2) {
if (o1.getAmountPrice() < o2.getAmountPrice()){
return 1;
}
return -1;
}
});
注:粘贴的代码中,有的显示为有红色下划线的报错状态,请不要在意,代码是本人亲自编写并检验过的,绝对正确,这里只简单的说了下怎么实现,没有什么代码健壮性可言,我也是刚刚开始学习JAVA,有错误的地方还请各位大佬指出,小弟万分感谢~ 不喜勿喷