Java中treeset和hashset的区别

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

(0)

相关推荐

  • java 集合中Set接口、数据结构

    集合中Set接口.数据结构 .Set接口 实现类 HashSet HashSet的特征 LinkedHashSet TreeSet 自然排序 数据结构 哈希表 哈希冲突 散列算法 二叉树 .Set接口 ...

  • Java中堆和栈的区别

    堆和栈都是Java用来在RAM中存放数据的地方. 堆 (1)Java的堆是一个运行时数据区,类的对象从堆中分配空间.这些对象通过new等指令建立,通过垃圾回收器来销毁. (2)堆的优势是可以动态地分配 ...

  • java中AWT和SWing的区别与联系

    AWT和Swing都是java中的包. AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包. Swing :为解决 AWT 存在的问题而新开发的图形 ...

  • java中String str=""与new String()的区别

    常量池: 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据.它包括了关于类.方法.接口等中的常量,也包括字符串常量. 在常量池中存储字符串常量的 ...

  • java中equals,hashcode和==的区别

    java中equals,hashcode和==的区别 1.== java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型 byte,short,char,int,long,float,d ...

  • java中XML元素和节点的区别

    一.概念 1.元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素. 一个元素一定是一个结点,但是一个结点不一定是一个元素. 2.什么是node? NODE是相对TREE这种数据结构而言的.T ...

  • Java中 a+=b和a=a+b有什么区别?

    在java语言中,a+=b和a=a+b的主要区别是在运算的精度上.类似的有"-= . *= ./= .%= ",这里以a+=b 与 a=a+b 举例说明一下. 1.    下面是一 ...

  • Java中run()方法和start()方法的小区别

    好久未接触多线程,今日听完视频课,又有新的感觉,做小记以备自习 其中最关键的一句话是: start()方法会调用底层方法开启线程,并且会调用run()方法 而如果只是创建完线程,但并未调用start( ...

  • 恒生科技“六”箭齐发,与中概互联有什么区别?

    从去年下半年以来,A股科技板块出现了持续调整,以至于不少投资者纷纷抱怨,手中持有的5G通信主题.半导体芯片主题等科技基金至今仍在亏损中.于是,大家纷纷把目光转向了A股以外的市场,比如投资港股的中概互联 ...

  • Java 中的关键字

    Java 中有多少个关键字,有大小写之分吗? Java 中有 48 个关键字在使用 + 两个保留关键字未使用,共 50 个关键字. Java 关键字全部都由是小写组成. Java 中保留关键字分别是哪 ...