ITPub博客

首页 > 应用开发 > Java > 好程序员Java培训分享treeset和hashset的区别

好程序员Java培训分享treeset和hashset的区别

原创 Java 作者:好程序员 时间:2020-11-19 16:51:01 0 删除 编辑

  好程序员Java 培训分享 treeset 和 hashset 的区别 首先我们来说一下 HashSet 。

   HashSet 有以下特点

   不能保证元素的排列顺序,顺序有可能发生变化

   不是同步的

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

   当向HashSet 集合中存入一个元素时, HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值来决定该对象在 HashSet 中存储位置。

   简单的说,HashSet 集合判断两个元素相等的标准是两个对象通过 equals 方法比较相等,并且两个对象的 hashCode() 方法返回值相等

   注意,如果要把一个对象放入HashSet 中,重写该对象对应类的 equals 方法,也应该重写其 hashCode() 方法。其规则是如果两个对象通过 equals 方法比较返回 true 时,其 hashCode 也应该相同。另外,对象中用作 equals 比较标准的属性,都应该用来计算 hashCode 的值。

   TreeSet 类

   TreeSet 是 SortedSet 接口的唯一实现类, TreeSet 可以确保集合元素处于排序状态。 TreeSet 支持两种排序方式,自然排序和定制排序,其中自然排序为默认的排序方式。向 TreeSet 中加入的应该是同一个类的对象。

   TreeSet 判断两个对象不相等的方式是两个对象通过 equals 方法返回 false ,或者通过 CompareTo 方法比较没有返回 0

   自然排序

   自然排序使用要排序元素的CompareTo ( Object obj )方法来比较元素之间大小关系,然后将元素按照升序排列。

   Java 提供了一个 Comparable 接口,该接口里定义了一个 compareTo(Object obj) 方法,该方法返回一个整数值,实现了该接口的对象就可以比较大小。

   obj1.compareTo(obj2) 方法如果返回 0 ,则说明被比较的两个对象相等,如果返回一个正数,则表明 obj1 大于 obj2 ,如果是负数,则表明 obj1 小于 obj2 。

   如果我们将两个对象的equals 方法总是返回 true ,则这两个对象的 compareTo 方法返回应该返回 0

   定制排序

   自然排序是根据集合元素的大小,以升序排列,如果要定制排序,应该使用Comparator 接口,实现 int compare(T o1,T o2) 方法。

   最重要:

   1 、 TreeSet 是二差树实现的 ,Treeset 中的数据是自动排好序的,不允许放入 null 值。

   2 、 HashSet 是哈希表实现的 ,HashSet 中的数据是无序的,可以放入 null ,但只能放入一个 null ,两者中的值都不能重复,就如数据库中唯一约束。

   3 、 HashSet 要求放入的对象必须实现 HashCode() 方法,放入的对象,是以 hashcode 码作为标识的,而具有相同内容的 String 对象, hashcode 是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913864/viewspace-2735322/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-03-20

  • 博文量
    342
  • 访问量
    195008