TreeSet
对于TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口(注意Collection位于java.lang.Object包),因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较比较器递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。
- 按照自然顺序排序,java.lang.Comparable,调用new TreSet()空构造器方法
- 按照业务类排序,java.util.Comparator,调用new TreeSet(Comparator
public class person {
private String name;
private int hansome;
public person() {
}
public person(String name, int hansome) {
super();
this.name = name;
this.hansome = hansome;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHansome() {
return hansome;
}
public void setHansome(int hansome) {
this.hansome = hansome;
}
@Override
public String toString() {
return this.name+"--"+this.hansome;
}
}
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class TestTreeSet {
public static void main(String[] args) {
Set<person> list = new TreeSet<>(new Comparator<person>(){
@Override
public int compare(person o1, person o2) {
return o1.getHansome()-o2.getHansome();
} //如果使用业务规则排序,需要使用带参构造
});
person p1 = new person("我", 100);
person p2 = new person("你", 80);
person p3 = new person("他", 10);
person p4 = new person("她", 90);
list.add(p1);
//注意,TreeSet是在添加数据的自动排序,不像Collections需要调用排序方法
//在谈价p2的时候就和p1作比较
list.add(p2);
list.add(p3);
list.add(p4);
System.out.println(list);
System.out.println("--------注意,就算改变数据,顺序还是不会变,所以最好不要修改数据--------");
p4.setHansome(10); //想要数据不被修改,就吧不应该被改的数据改成final修饰就行
System.out.println(list);
}
}
输出结果为:[他--10, 你--80, 她--90, 我--100]
--------注意,就算改变数据,顺序还是不会变,所以最好不要修改数据--------
[他--10, 你--80, 她--10, 我--100]
当然,也可以使用Comparable按照自然排序
public class worker implements Comparable<worker>{
private String type;
private double salary;
public worker() {
}
public worker(String type, double salary) {
super();
this.type = type;
this.salary = salary;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public int compareTo(worker o) {
return (int) (this.salary-o.salary);
}
@Override
public String toString() {
return this.type+"--"+this.salary;
}
}
import java.util.Set;
import java.util.TreeSet;
public class TestTree_1 {
public static void main(String[] args) {
worker w1 = new worker("农民", 2000);
worker w4 = new worker("我", 20000);
worker w3 = new worker("白领", 5000);
worker w2 = new worker("工民", 3000);
Set<worker> set = new TreeSet<worker>();
set.add(w1);
set.add(w2);
set.add(w3);
set.add(w4);
System.out.println(set);
}
}
输出结果:[农民--2000.0, 工民--3000.0, 白领--5000.0, 我--20000.0]