- TreeSet特点:因为TreeSet实现了Set接口,所以,数据元素是不可以重复的,但是可以排序。
- HashSet接口:必须重写 equals方法和hashcode()方法。只要是排序,无非是返回-1,0,1。
- 当返回0时,说明对象相同,可以进行去除操作。
- 首先创建一个科目javabean,提供无参数构造器和带参数构造器。重写toString()
/**
* 学习的科目
*
* @author Administrator
*
*/
public class Subject {
// 名字
private String name;
// 学费
private int tuition;
// 书费
private int bookFee;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getTuition() {
return tuition;
}
public void setTuition(int tuition) {
this.tuition = tuition;
}
public int getBookFee() {
return bookFee;
}
public void setBookFee(int bookFee) {
this.bookFee = bookFee;
}
public Subject(String name, int tuition, int bookFee) {
super();
this.name = name;
this.tuition = tuition;
this.bookFee = bookFee;
}
public Subject() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("姓名:" + this.name + ",");
sb.append("学费:" + this.tuition + ",");
sb.append("书费:" + this.bookFee).append("\n");
return sb.toString();
}
}
package org.hz.collection_sort.refType;
import java.util.TreeSet;
public class SubjectBookfeeSort {
public static void main(String[] args) {
Subject subject1 = new Subject("信息工程", 15600, 400);
Subject subject2 = new Subject("考古发掘", 21000, 1000);
Subject subject3 = new Subject("工程管理", 18800, 300);
Subject subject4 = new Subject("畜牧兽医", 17600, 50);
Subject subject5 = new Subject("园艺技术", 19800, 500);
// TreeSet特点是 元素可以排序,而且不能重复,所以排序之后不要进行修改操作。
// 排序结果后,如果发现打印出来的结果少了一个或者多个,那么少了几条数据,就是有几个重复的。只显示第一个加入treeSet中的元素,其他的都不显示
TreeSet<Subject> treeSet = new TreeSet<Subject>(new java.util.Comparator<Subject>() {
// 根据书费进行降序排序 排序完成之后,不要修改里面的内容,否则可能会导致数据重复问题,但是顺序还是没有变化的。
@Override
public int compare(Subject o1, Subject o2) {
return -(o1.getBookFee() - o2.getBookFee());
}
});
treeSet.add(subject5);
treeSet.add(subject1);
treeSet.add(subject2);
treeSet.add(subject3);
treeSet.add(subject4);
System.out.println(treeSet);
}
}
输出结果:
[姓名:考古发掘,学费:21000,书费:1000
, 姓名:园艺技术,学费:19800,书费:500
, 姓名:信息工程,学费:15600,书费:400
, 姓名:工程管理,学费:18800,书费:300
, 姓名:畜牧兽医,学费:17600,书费:50
]