set 集合,挑战华为社招
?? ?}
?? ?public void setPrice(int price) {
?? ??? ?this.price = price;
?? ?}
?? ?@Override
?? ?public String toString() {
?? ??? ?return "user [name=" + name + ", price=" + price + "]";
?? ?}
?? ?public user(String name, int price) {
?? ??? ?super();
?? ??? ?this.name = name;
?? ??? ?this.price = price;
?? ?}
?? ?public user() {
?? ?}
?? ?@Override
?? ?public int compareTo(Object o) {
?? ??? ?user u=(user) o;
?? ??? ?return this.price-u.price;
?? ?}
}
运行输出的结果就会根据 price 排序
这样写也有个弊端,因为不同的模块有不同的需求,对于一张表有不同的排序规则,这个时候这个方法就不合适了,就要用到比较器进行排序
package com.set;
import java.util.Comparator;
import java.util.TreeSet;
public class demo3 {
public static void main(String[] args) {
?? ?TreeSet<users> set = new TreeSet<users>(new price());
?? ?set.add(new users("aaa", 13));
?? ?set.add(new users("ccc", 14));
?? ?set.add(new users("bbb", 12));
?? ?for (users s : set) {
?? ??? ?System.out.println(s);
?? ?}
}
}
class price implements Comparator<users>{
?? ?@Override
?? ?public int compare(users o1, users o2) {
?? ??? ?return o1.getPrice()-o2.getPrice();
?? ?}
}
class users{
?? ?private String name;
?? ?private int price;
?? ?public String getName() {
?? ??? ?return name;
?? ?}
?? ?public void setName(String name) {
?? ??? ?this.name = name;
?? ?}
?? ?public int getPrice() {
?? ??? ?return price;
?? ?}
?? ?public void setPrice(int price) {
?? ??? ?this.price = price;
?? ?}
?? ?@Override
?? ?public String toString() {
?? ??? ?return "user [name=" + name + ", price=" + price + "]";
?? ?}
?? ?public users(String name, int price) {
?? ??? ?super();
?? ??? ?this.name = name;
?? ??? ?this.price = price;
?? ?}
?? ?public users() {
?? ?}
?? ?
}
?
直接把 price 类传进去,可以根据不同的排序方式传不同的类,还可以这么写
也可根据 name 的首字母(a-z)排序
评论