目录
三、实现Comparable接口 ,重写compareTo()方法
一、Comparable接口
TreeSet的特点是:无序不重复,但能排序,可以快速实现对数值的排序。
我们也可以尝试使用元素的自然排序进行排序:
存储非自定义对象(必须本身已经实现Comparable接口),默认进行排序。
存储自定义对象(需要实现Comparable接口,重写compareTo方法)进行排序。
我们这篇会讲到如何通过实现Comparable接口,重写compareTo方法来对TreeMap集合中的数值进行自定义排序。
二、创建一个实现类
这里我们创建一个BookEntity实现类来实现Comparable接口,类中有两个属性--图书名称name和图书价格price,两个属性都是private修饰的,因此需要有get()、set()方法,处理get()、set()方法外,为了方便格式输出,我们重写了toString()方法。
除此之外,由于TreeMap为了比较内容的重复性,还需要重写hashcode()和equals()方法。
BookEntity类的代码如下:
public class BookEntity{
private String name;
private Double price;
public BookEntity() {
}
public BookEntity(String name, Double price) {
this.name = name;
this.price = price;
}
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 boolean equals(Object object) {
if (this == object) return true;
if (object == null || getClass() != object.getClass()) return false;
BookEntity that = (BookEntity) object;
return Objects.equals(name, that.name) && Objects.equals(price, that.price);
}
@Override
public int hashCode() {
return Objects.hash(name, price);
}
@Override
public String toString() {
return "BookEntity{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
}
三、实现Comparable接口 ,重写compareTo()方法
自定义排序:比较图书名称是否相同,如若相同则通过图书价格进行排序,反之,通过图书名称进行排序,如若都相同,则保留一条数据。
接口实现代码如下:
public class BookEntity implements Comparable<BookEntity>{
重写compareTo()方法代码如下:
@Override
public int compareTo(BookEntity o) {
if (this.name.equals(o.getName())){
return this.price.compareTo(o.getPrice());
}else if (this.price == o.getPrice()){
return this.name.compareTo(o.getName());
}else {
return 0;
}
}
四、测试类
创建多个BookEntity对象以及一个String类型的BookStore对象,用于之后使用put()方法将BookEntity对象传入TreeMap集合中 。
测试类代码如下:
public class TestBookHashMap {
public static void main(String[] args) {
TreeMap<BookEntity,String> treeMap = new TreeMap();
String BookStore = "嘻嘻福利";
BookEntity bookEntity = new BookEntity("哈利波特", 25.0);
BookEntity bookEntity1 = new BookEntity("哈利波特", 35.0);
BookEntity bookEntity2 = new BookEntity("老人与海", 13.0);
BookEntity bookEntity3 = new BookEntity("哈利波特", 45.0);
treeMap.put(bookEntity,BookStore);
treeMap.put(bookEntity1,BookStore);
treeMap.put(bookEntity2,BookStore);
treeMap.put(bookEntity3,BookStore);
System.out.println(treeMap);
}
}