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]