6 Responses so far.
Leave a Comment
TreeSet是依靠TreeMap来实现的
TreeSet是一个有序集合,她的元素 按照升序排列,默认是按照自然顺序排列,也就是说TreeSet中的对象元素需要实现Comparable接口。
TreeSet类中跟HashSet类一样也没有get()方法来获取列表中的元素,所以也只能通过迭代器方法来获取。
import java.util.*; public class TreeSetTest { public static void main(String[] args) { TreeSet tr =new TreeSet(); tr.add("zhangshan"); tr.add("wangwu"); tr.add("lisi"); Iterator it =tr.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } }
上面打印结果为:lisi wangwu zhangshan 这时因为TreeSet是一个有序并且默认按自然顺序排列,而不像哈希表那样毫无规律。
上面向TreeSet中添加的对象好像没有实现Comparable接口哦??那是因为添加的是String对象,而String类已经实现了Comparable接口。
当然,你也可以在创建TreeSet对象时传递一个比较器来实现你自己的排序方式:
import java.util.*; public class TreeSetTest { public static void main(String[] args) { //传递一个比较器来实现你自己的排序方式 TreeSet tr =new TreeSet(new Student.StudentComparator()); tr.add(new Student(3,"wnagwu")); tr.add(new Student(2,"zhangshan")); tr.add(new Student(2,"lisi")); tr.add(new Student(1,"xiejin")); Iterator it =tr.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } } class Student implements Comparable,Comparator { int num; String name; Student(int num,String name) { this.num=num; this.name=name; } public int compareTo(Object o) { Student st =(Student)o; int result; result= num>st.num?1:(num==st.num?0:-1); //如果学号相等,就按姓名排列 /*if(result==0) { return name.compareTo(st.name); }*/ return result; } //实现Comparator接口并实现它的抽象方法 public int compare(Object o1,Object o2) { Student st1 =(Student)o1; Student st2 =(Student)o2; return st1.name.compareTo(st2.name); } //重写toString()方法,因为如果不重写,打印出来的是16进制代码 public String toString() { return "num="+num+"; name="+name; } public static class StudentComparator implements Comparator { public int compare(Object o1,Object o2) { Student st1 =(Student)o1; Student st2 =(Student)o2; int result; result=st1.num>st2.num?1:(st1.num==st2.num?0:-1); if(result==0)//如果学号相等 就进行名字排序 { result=st1.name.compareTo(st2.name); } return result; } } }
上面如果只使用学号排序,那么学号相同的就不会被打印的。
问题 :如果不用内部类实现比较器,该怎么做???
HashSet与TreeSet的区别:
HashSet是基于hash算法实现的,性能优于TreeSet。通常使用HashSet,在我们需要对其中元素排序的时候才使用TreeSet。
来源:http://blog.csdn.net/wzwjr/archive/2008/12/27/3618195.aspx
this publish was good. I do not know who you might be however definitely you are
going to a famous blogger for those who are
not already. Cheers!