黑马程序员技术交流社区

标题: HashSet 和 TreeSet的区别? [打印本页]

作者: mischen    时间: 2016-5-20 20:50
标题: HashSet 和 TreeSet的区别?
HashSet 和 TreeSet的区别?
作者: foolfeelu    时间: 2016-5-20 22:44
HashSet 所存取的元素是不可重复的,并且元素都是无序的,当向HashSet集合中添加元素时,首先会调用该对象的hashCode()方法来确定元素位置,然后再调用对象的euqals()方法来确保该位置没有重复元素.
TreeSet 内部采用排序二叉树来存取元素,可以保证TreeSet集合中没有重复的元素并排序,但是TreeSet中的存储的引用数据类型必须实现Comparable接口因为TreeSet中的元素在进行比较的时候,会调用Comparable中的compareTo()方法比较保证没有重复的元素,Integer,Double,String 都实现了这个接口 , 我感觉这是HashSet和Tree
Set的一个区别 , 还有就是 HashMap 是根据 哈希值存储元素 TreeSet 是以二叉树的方式存储元素
作者: 可以假装看不见    时间: 2016-5-20 22:54
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集合的构造函数。
作者: 新晋猿工    时间: 2016-5-21 00:33
排不排序的区别
作者: 新晋猿工    时间: 2016-5-21 00:35
排不排序的区别




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