Hashset和Treeset的区别

  • Post author:
  • Post category:其他



Set中元素不可以重复,是无序的

(这里的无序是指存入元素的先后顺序与输出元素的先后顺序不一致)


HashSet:

①内部的数据结构是

哈希表

,是

线程不安全

的。



②HashSet中保证集合中元素是唯一的方法:通过对象的

hashCode和equals方法

来完成对象唯一性的判断。如果对象的hashCode值不同



则不用判断equals方法,就直接存到HashSet中




注意:如果元素要存到HashSet中,必须覆盖hashCode方法和equals方法。

③HashSet是哈希表实现的,HashSet中的元素是

无序

的。集合元素可以是null,但只能放入一个null。

HashSet要求放入的对象必须实现HashCode()方法,放入的对象是以

hashcode码作为标识的

,而具有相同内容的String对象,HashCode是一样的,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例。


TreeSet:



TreeSet是SortedSet接口的唯一实现类,TreeSet可以保证集合元素处于

排序状态

。TreeSet支持两种排序方式,自然排序和定制排序,其中自然排序是默认的排序方式,想TreeSet中加入的对象应该是同一个类的对象。

①可以对Set集合中的元素进行排序,是线程不安全的。

②TreeSet判断元素唯一性的方法是:根据比较方法的返回结果是否为0,如果是0,则是相同元素,如果不是0,是不同元素,存储。

③TreeSet对元素进行排序的方式:元素自身具备比较的功能,

即自然排序,需要实现Comparable接口,并覆盖其compareTo方法

。元素本身不具备比较功能的,则需要实现Comparator,并覆盖其compare方法(定制排序)。



④TreeSet是二叉树实现的,TreeSet中的数据是自动排好顺序的,不允许放入null值


总结

:HashSet存放对象的时候判断对象是否相等,是根据对象的hashCode和equals方法。TreeSet存放对象时,是根据对象的compareTo方法比较两个对象是否相等,并进行比较。


Hashset和Treeset的使用场景


HashSet

:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定的顺序来存放。


TreeSet

:提供一个使用树结构存储set接口的实现(红黑树算法)。对象以升序顺序存储,访问和遍历的时间很快。


使用场景

:HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet。



版权声明:本文为m0_37235955原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。