A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mischen 中级黑马   /  2016-5-20 20:50  /  1339 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

HashSet 和 TreeSet的区别?

4 个回复

倒序浏览
HashSet 所存取的元素是不可重复的,并且元素都是无序的,当向HashSet集合中添加元素时,首先会调用该对象的hashCode()方法来确定元素位置,然后再调用对象的euqals()方法来确保该位置没有重复元素.
TreeSet 内部采用排序二叉树来存取元素,可以保证TreeSet集合中没有重复的元素并排序,但是TreeSet中的存储的引用数据类型必须实现Comparable接口因为TreeSet中的元素在进行比较的时候,会调用Comparable中的compareTo()方法比较保证没有重复的元素,Integer,Double,String 都实现了这个接口 , 我感觉这是HashSet和Tree
Set的一个区别 , 还有就是 HashMap 是根据 哈希值存储元素 TreeSet 是以二叉树的方式存储元素
回复 使用道具 举报
Set:元素不可以重复,是无序。
        Set接口中的方法和Collection一致。
        |--HashSet: 内部数据结构是哈希表 ,是不同步的。
                如何保证该集合的元素唯一性呢?
                是通过对象的hashCode和equals方法来完成对象唯一性的。
                如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
                如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
                如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
               
                记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。
                一般情况下,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。
                建立对象判断是否相同的依据。
               
               
               
               
        |--TreeSet:可以对Set集合中的元素进行排序。是不同步的。
                                判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。
                               
                                TreeSet对元素进行排序的方式一:
                                让元素自身具备比较功能,元就需要实现Comparable接口。覆盖compareTo方法。
                               
                                如果不要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序。怎么办?
                                可以使用TreeSet集合第二种排序方式二:
                                让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。
                                将该类对象作为参数传递给TreeSet集合的构造函数。
回复 使用道具 举报
排不排序的区别
回复 使用道具 举报
排不排序的区别
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马