黑马程序员技术交流社区

标题: 求解,Treeset怎么保证元素唯一啊 [打印本页]

作者: 薄荷糖i    时间: 2016-4-29 20:02
标题: 求解,Treeset怎么保证元素唯一啊
表示已经蒙蔽了,求大神帮忙解答,答得好我可以回赠黑马币   在线等,着急写作业呢
作者: 单曲循环1992    时间: 2016-4-29 20:11
TreeSet可以保证元素的唯一,同时可以对元素进行排序,排序依赖类实现Comparable接口,并在类中重写compareTo方法,或者对集合传入一个比较器:Comparator,重写compare方法,通常推荐第二种,保证元素唯一的原理和HashSet一致,调用hashcode和equals方法
不知道有没有说清楚...一会给你上代码看一下
作者: 薄荷糖i    时间: 2016-4-29 20:14
单曲循环1992 发表于 2016-4-29 20:11
TreeSet可以保证元素的唯一,同时可以对元素进行排序,排序依赖类实现Comparable接口,并在类中重写compareTo ...

能不能举个例子呢
作者: 单曲循环1992    时间: 2016-4-29 20:16
举例说明:public static void main(String[] args) {
                TreeSet<String> ts = new TreeSet<>();
                ts.add("a");
                ts.add("c");
                ts.add("t");
                ts.add("b");
                ts.add("e");
                ts.add("o");
                ts.add("f");
               
                System.out.println(ts);                                //[a, b, c, e, f, o, t],自动排序,因为String中实现了Comparable接口,按字典排序
               
                for (String string : ts) {                        //增强for遍历
                        System.out.print(string + " ");
                }
                System.out.println();
                TreeSet<Student> ts2 = new TreeSet<>(new Comparator<Student>() {                        //传入比较器comparator
                        @Override
                        public int compare(Student s1, Student s2) {
                                int num = s1.getAge() - s2.getAge();
                                return num == 0? s1.getName().compareTo(s2.getName()) : num;
                        }
                });
                ts2.add(new Student("张三", 23));
                ts2.add(new Student("周期", 24));
                ts2.add(new Student("王武", 25));
                ts2.add(new Student("赵六", 26));
                ts2.add(new Student("李四", 24));
               
                System.out.println(ts2);
               
                Iterator<Student> it = ts2.iterator();                        //迭代器遍历
                while (it.hasNext()) {
                        System.out.println(it.next());
                }
               
                TreeSet<Student> ts3 = new TreeSet<>();                        //Student类实现了comparable接口,按照定义好的compareTo方法排序
                ts3.add(new Student("张三", 23));
                ts3.add(new Student("周期", 24));
                ts3.add(new Student("王武", 25));
                ts3.add(new Student("赵六", 26));
                ts3.add(new Student("李四", 24));
               
                System.out.println(ts3);
                for (Student student : ts3) {                                //增强for遍历
                        System.out.println(student);
                }
        }
}


不好意思,刚有事,耽误了会....
作者: 薄荷糖i    时间: 2016-4-29 20:19
单曲循环1992 发表于 2016-4-29 20:16
举例说明:public static void main(String[] args) {
                TreeSet ts = new TreeSet();
                ts.add("a");

我去  大神好样的 我去试试  好了黑马币一定奉上
作者: 九天玄妖    时间: 2016-4-29 20:51
楼上回答的很好了
作者: songwenhao    时间: 2016-4-29 21:55
谢谢分享
作者: BackGaoz    时间: 2016-4-29 22:17
回答的很详细,赞一个!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2