Java——HashSet和TreeSet的区别

2人阅读 评论(0) 收藏 举报
分类:

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是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。

 

查看评论

JavaSE之集合实战视频课程

-
  • 1970年01月01日 08:00

Java中HashSet、TreeSet的区别

1、HashSet、TreeSet的区别 HashSet是使用散列表进行存储,元素无序,元素允许为null。TreeSet是使用树结构来进行存储,元素按字符串顺序排序存储,元素不允许为null。 ...
  • vinegar93
  • vinegar93
  • 2016-05-25 21:10:10
  • 1904

HashSet和TreeSet的区别是什么?

一. 问题 1. HashSet,TreeSet是如何使用hashCode()和equal()方法的 2. TreeMap,TreeSet中的对象何时以及为何要实现Comparable...
  • Micheal100
  • Micheal100
  • 2014-09-15 07:36:17
  • 6853

java中的HashSet和TreeSet的区别,以及HashSet导致的内存泄漏详解

Set集合中的元素是无序的,不可重复的。这个接口下有两个常用集合的实现,HashSet和TreeSet。 HashSet HashSet底层用的是哈希表,它把对象根据其哈希值存放到对应的区域里。...
  • xingjiyuan26
  • xingjiyuan26
  • 2015-10-30 17:43:53
  • 8841

HashSet、LinkedHashSet和TreeSet三者区别与联系

一.HashSet 特点: 1.HashSet中不能有相同的元素,可以有一个Null元素,存入的元素是无序的。 2.HashSet如何保证唯一性? 1).HashSet底层数据结构是哈希表,哈...
  • StemQ
  • StemQ
  • 2017-03-26 19:34:20
  • 1230

Java集合中的ArrayList LinkedList HashSet TreeSet HashMap TreeMap 的区别

首先它们6个是分别属于三个类别的 也就是List   Set  Map List与Set都是单独存放对象的,Map是放一个名指对,就是可以通过key找到value 主要区别: List 存放是有...
  • ch751652064
  • ch751652064
  • 2013-01-18 13:02:37
  • 1070

java集合系列——Set之HashSet和TreeSet介绍(十)

Set是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素。对 e1 和 e2,并且最多包含一个为 null 的元素。...
  • u010648555
  • u010648555
  • 2017-03-06 11:59:52
  • 1490

Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)

Set概述 Set几乎都是内部用一个Map来实现, 因为Map里的KeySet就是一个Set,而value是假值,全部使用同一个Object。Set的特征也继承了那些内部Map实现的特征。HashSe...
  • u013256816
  • u013256816
  • 2016-03-17 21:37:57
  • 2757

HashSet TreeSet LinkedHashSet 区别

set不包含重复的元素,这也是使用set的一个主要原因,set有三个常用的实现,分别是HashSet、TreeSet和LinkedList。总之,对于这三个实现,何时使用是一个重要的问题,如果你需要一...
  • maoyeqiu
  • maoyeqiu
  • 2015-09-27 13:01:37
  • 2640

HashSet和TreeSet有和异同

相同点: 所存储元素都不可重复 不同点 1. 底层存储的数据结构不同     HashSet底层用的是HashMap哈希表结构存储,而TreeSet底层用的是TreeMap树结构存储 2.存储时保证数...
  • geduo_83
  • geduo_83
  • 2014-03-06 11:05:09
  • 4319
    个人资料
    等级:
    访问量: 3879
    积分: 239
    排名: 30万+
    文章存档
    最新评论