javaSE-day08--自己的通用排序工具、泛型参数排序工具、JDK中Collections排序工具

本文介绍了一种通用排序工具的设计与实现,包括自定义排序框架、泛型排序工具及使用JDK内置排序工具Collections的方法。通过不同类(如User和Product)的实例展示了如何根据不同属性进行灵活排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己的通用排序工具

USer类

package day08.Util1;

public class User {
	private String name;
	private int age;
	private double salary;

	public User() {

	}

	public User( String name, int age, double salary) {

		this.name = name;
		this.age = age;
		this.salary = salary;
	}

	public String getName() {
		return name;
	}



	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}
	
	@Override
	public String toString() {
		return name + "," + age + ","+ salary ;
	}
}

排序工具类—利用接口封装排序框架

package day08.Util1;

import java.util.ArrayList;

public class SortUtil {
	public static void sort(ArrayList<User> uList,BiJiaoQi bijiaoqi) {
		for(int i=0;i<uList.size()-1;i++) {
			for(int j=0;j<uList.size()-1-i;j++) {
				boolean bijiao =bijiaoqi.bijiao(uList.get(j), uList.get(j+1));
				if(bijiao) {
					User uu =uList.get(j);
					uList.set(j, uList.get(j+1));
					uList.set(j+1, uu);
				}
			}
		}
	}
}

接口,用户在使用框架的时候,必须传入这个接口的一个实现类对象

package day08.Util1;

public interface BiJiaoQi {
	public boolean bijiao(User u1,User u2);
}

实现接口功能—比较

package day08.Util1;

public class AgeBiJiaoQi implements BiJiaoQi {

	@Override
	public boolean bijiao(User u1, User u2) {
		if (u1.getAge() < u2.getAge()) {
			return true;
		}
		return false;
	}

}

测试类

package day08.Util1;

import java.util.ArrayList;

public class Test {
	public static void main(String[] args) {
		ArrayList<User> arrayList = new ArrayList<>();
		User user1 = new User("aa", 12, 100);
		User user2 = new User("bb", 13, 200);
		User user3 = new User("cc", 14, 300);

		arrayList.add(user1);
		arrayList.add(user2);
		arrayList.add(user3);
		//使用工具
		SortUtil.sort(arrayList, new AgeBiJiaoQi());
		
		for(User u:arrayList) {
			System.out.println(u);
		}
	}
}

泛型参数排序工具

User类

package day08.Util2;

public class User {

	private String name;
	private int age;
	private float salary;

	public User() {

	}

	public User(String name, int age, float salary) {

		this.name = name;
		this.age = age;
		this.salary = salary;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public float getSalary() {
		return salary;
	}

	public void setSalary(float salary) {
		this.salary = salary;
	}

	@Override
	public String toString() {
		return this.name + "," + this.age + "," + this.salary;
	}

}

Product类

package day08.Util2;

public class Product {
	private String productId;
	private String productName;
	private double price;
	private int sum;
	public Product() {}
	
	public Product(String productId, String productName, double price, int sum) {
		this.productId = productId;
		this.productName = productName;
		this.price = price;
		this.sum = sum;
	}

	public String getproductId() {
		return productId;
	}

	public void setproductId(String productId) {
		this.productId = productId;
	}

	public String getproductName() {
		return productName;
	}

	public void setproductName(String productName) {
		this.productName = productName;
	}

	public double getprice() {
		return price;
	}

	public void setprice(double price) {
		this.price = price;
	}

	public int getsum() {
		return sum;
	}

	public void setsum(int sum) {
		this.sum = sum;
	}

	@Override
	public String toString() {
		return "Product [productId=" + productId + ", productName=" + productName + ", price=" + price + ", sum=" + sum
				+ "]";
	}
	
	
}

排序工具

package day08.Util2;

import java.util.ArrayList;

/**
 * SortUtil<T>里面的T是声明了一个代表“类型”的参数符号
 * 然后在SortUtil类中,就可以用T这个符号来代替具体的类型名
 * 
 * 这就是泛型
 * @author ThinkPad
 *
 * @param <T>
 */
public class SortUtil<T> {

	public void sort(ArrayList<T> list, BijiaoQi<T> bijiaoqi) {
		for (int i = 0; i < list.size() - 1; i++) {
			for (int j = 0; j < list.size() - 1 - i; j++) {
				boolean da = bijiaoqi.bijiao(list.get(j), list.get(j + 1));
				if (da) {
					T tmp = list.get(j);
					list.set(j, list.get(j + 1));
					list.set(j + 1, tmp);
				}

			}

		}

	}

}

接口

package day08.Util2;

public interface BijiaoQi<Y> {

	public boolean bijiao(Y o1 ,Y o2);
	
}

实现接口–按年龄排序对User排序

package day08.Util2;

public class AgeBijiaoqi implements BijiaoQi<User>{


	public boolean bijiao(User o1, User o2) {
		if(o1.getAge() > o2.getAge()) {
			return true;
		}
		return false;
	}

}

实现接口–按价格对Product排序

package day08.Util2;

public class PriceBijiaoqi implements BijiaoQi<Product> {

	@Override
	public boolean bijiao(Product o1, Product o2) {
		if (o1.getprice() > o2.getprice()) {
			return true;
		}
		return false;
	}
}

测试类----并且使用了 ‘匿名内部类’ 不需要创先新的类来实例化接接口、测试了Collections

package day08.Util2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Test {
	public static void main(String[] args) {

		// 造数据
		ArrayList<User> uList = new ArrayList<>();
		User u1 = new User("a", 18, 2000);
		User u2 = new User("b", 19, 3000);
		User u3 = new User("c", 28, 1800);
		User u4 = new User("d", 20, 2300);
		uList.add(u1);
		uList.add(u2);
		uList.add(u3);
		uList.add(u4);

		// 构造一个排序工具
		SortUtil<User> sortUtil = new SortUtil<>();

		sortUtil.sort(uList, new AgeBijiaoqi());

		// 对product list排序
		ArrayList<Product> plist = new ArrayList<>();
		plist.add(new Product("1", "a", 15.0, 3));
		plist.add(new Product("2", "b", 25.0, 2));
		plist.add(new Product("3", "c", 35.0, 4));
		plist.add(new Product("4", "d", 45.0, 5));

		SortUtil<Product> sortUtil2 = new SortUtil<>();
		// 按价格比较
		sortUtil2.sort(plist, new PriceBijiaoqi());

		//按照数量比较,用匿名内部类,不需要再创建新的类

		sortUtil2.sort(plist, new BijiaoQi<Product>() {

			@Override
			public boolean bijiao(Product o1, Product o2) {
				if (o1.getsum() > o2.getsum()) {
					return true;
				}
				return false;
			}

		});
		
		//对list排序jdk有现成的工具Collections
		Collections.sort(plist, new Comparator<Product>(){
			/*返回正o1>o2
			 * 返回负数o2<o1
			 * 返回0 o2=o1
			 */
			public int compare(Product o1,Product o2) {
				double res = o1.getprice()-o2.getprice();
				if(res>0) { //> < 控制升降序
					return 1;
				}
				return -1;
			}
			
		});
		for(Product p : plist) {
			System.out.println(p);
		}
	}
}

JDK中Collections排序工具

User类

package day08.Util3;

public class User implements Comparable<User> {

	private String name;
	private int age;
	private float salary;

	public User() {

	}

	public User(String name, int age, float salary) {

		this.name = name;
		this.age = age;
		this.salary = salary;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public float getSalary() {
		return salary;
	}

	public void setSalary(float salary) {
		this.salary = salary;
	}

	@Override
	public String toString() {
		return this.name + "," + this.age + "," + this.salary;
	}
	
	@Override
	public int compareTo(User other) {
		if (this.getSalary() > other.getSalary()) {
			return 1;
		}
		return -1;
	}
}

Test类

package day08.Util3;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class CollectionsTest {
	public static void main(String[] args) {

		ArrayList<User> uList = new ArrayList<>();
		User u1 = new User("a", 18, 2000);
		User u2 = new User("b", 19, 3000);
		User u3 = new User("c", 28, 1800);
		User u4 = new User("d", 20, 2000);
		uList.add(u1);
		uList.add(u2);
		uList.add(u3);
		uList.add(u4);
		// Collections工具来排序
		// 方式1:传专门的比较器给工具,此方法最通用,想按什么比就按什么比
		Collections.sort(uList, new Comparator<User>() {

			@Override
			public int compare(User o1, User o2) {
				if (o1.getAge() < o2.getAge()) { //< > 控制升降序
					return 1;
				}
				return -1;
			}
		});
		for(User u:uList) {
			System.out.println(u);
		}
		System.out.println("-----------------------");
		//方式2:不传专门的比较工具,前提是,list中的数据类型可比较
		//(数据类型本身要实现一个接口Comparable)实现其中的compareTo()方法
		Collections.sort(uList);
		for(User uu: uList) {
			System.out.println(uu);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值