TreeSte:二叉树数据结构。可以对元素进行排序,不同步的
如何保证元素唯一性?
参考的就是比较犯法的返回值是否是0,是,就是重复元素,不存。
排序方式:需要元素具备比较功能,所以元素需要实现Comarable接口。覆盖CompareTo方法。
需求中也有这样一种情况:元素具备的比较功能不是所需要的,也就是说不想按照自然
排序的方式,而是按照自定义的排序方式对元素进行排序。
而且,存储到TreeSTet中的元素万一没有比较功能该如何排序呢?比如学生类是别人写的,没有定义学生类的排序方法。
这时候,就只能使用第二种比较方式:是让集合具备比较功能,定义一个比较器
实现Comparator接口,覆盖compare方法。将Comparator接口的对象,
作为参数传递给TreeSet集合的构造函数
比较器更为灵活,自然排序通常作为元素的默认排序
package java_test;
class Students implements Comparable{
private String name;
private int age;
public Students() {
super();
// TODO Auto-generated constructor stub
}
public Students(String name, int age) {
super();
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Students [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
}
======================
package java_test;
import java.util.Comparator;
/**
* 自定义一个比较器,用来对学生对象按照姓名进行排序
* @author ningpuyong
*
*/
public class ComapretoByName implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Students s1 = (Students)o1;
Students s2 = (Students)o2;
int temp= s1.getName().compareTo(s2.getName());
return temp==0?s1.getAge()-s2.getAge():temp;
}
}
===============
package java_test;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetDemo2 {
public static void main(String[] args) {
//初始化TreeSet集合时明确一个比较器。让集合具备比较性,把元素直接存进来就行
Set set = new TreeSet(new ComapretoByName());
set.add(new Students("xiaozhang",25));
set.add(new Students("xiaoming",21));
set.add(new Students("daniu",22));
set.add(new Students("tudou",27));
for (Iterator it = set.iterator(); it.hasNext();) {
Students stu = (Students) it.next();
System.out.println(stu);
}
}
}
========
运行结果:
Students [name=daniu, age=22]
Students [name=tudou, age=27]
Students [name=xiaoming, age=21]
Students [name=xiaozhang, age=25]