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
I don’t even know the way I ended up here, but I assumed
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!
I found myself nodding my noggin all the way thhorgu.
I’d like to find out more? I’d care to find out some additional information.
Outstanding post, I think website owners should acquire a lot from this site its very user genial.
Your positng lays bare the truth
asc waan idin salamay aqyaarta reer somaliska waxaan aad ugu qoslay walasheey muniira kkkkkkk cadi matahid runta isakhseegaU codee: 0 1