今天项目开发,需要通过两个条件去查询数据库数据,同时只要满足一个条件就可以取出这个对象。所以通过取出的数据肯定会有重复,所以要去掉重复项。

如果用list集合接收两次的返回对象,那么肯定是有重复对象在list集合中,一开始我想到的是TreeSet,但知道TreeSet存放对象,一定要重写compareto方法,进行排序规则。

而我仅仅是去重,并不需要排序。 所以我就用了HashSet,下面也就缕一缕有关set集合的一些知识点。

一、Set接口

1.Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。

2.Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不会接受这两个对象。

HashSet与TreeSet都是基于Set接口的实现类。其中TreeSet是Set的子接口SortedSet的实现类。Set接口及其子接口、实现类的结构如下所示:

|——SortedSet接口——TreeSet实现类

Set接口——|——HashSet实现类

|——LinkedHashSet实现类

二、HashSet

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

2. 不是同步的

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

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

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

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

三、TreeSet

TreeSet类型是J2SE中唯一可实现自动排序的类型

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(To1,To2)方法

四、LinkedHashSet

LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺 序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。

LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

转载于:https://www.cnblogs.com/cxfly/p/10540961.html

HashSet 与TreeSet和LinkedHashSet的区别相关推荐

  1. Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet

    2019独角兽企业重金招聘Python工程师标准>>> 这几天看了下容器的源码,总结一下HashSet vs TreeSet vs LinkedHashSet的区别, 如下图,col ...

  2. HashSet、TreeSet和LinkedHashSet

    Set不能包含重复的元素.有三个通用的set接口的实现:HashSet.TreeSet和LinkedHashSet.什么时候用以及用哪个是一个重要的问题.总体来说,如果要一个快速的集合,就用HashS ...

  3. HashSet vs TreeSet vs LinkedHashSet

    使用Set集合的主要原因是因为Set集合里面没有重复的元素.Set集合有三个常见的实现类:HashSet,TreeSet,LinkedHashSet.什么时候,选择哪一个使用非常重要.简单的说,如果你 ...

  4. Set 、HashSet、TreeSet、LinkedHashSet、EnumSet

    Set 底层原理: java中set及其子类都是由对应的Map实现的,如HashSet由HashMap实现,TreeSet由TreeMap实现等等. private static final Obje ...

  5. HashSet,TreeSet和LinkedHashSet的区别

    Set接口 Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false. Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用 ...

  6. 集合-2(Set(HashSet、TreeSet、LinkedHashSet)、List(ArrayList、LinkedList、Vector)、Map(HashMap、TreeMap...))

    1.Set接口 集合中的元素不能重复,所以存入Set的元素都必须定义equals()来确保对象的唯一性. 无序.无索引 1.1HashSet类 实现了Set接口,此实现不是同步的. 由哈希表支持.实际 ...

  7. HashSet 和 TreeSet的区别

    HashSet 和 TreeSet的区别 HstSet和TreeSet详解 HashSet 内部是由哈希表(实际上是一个 HashMap 实例)支持的.它不保证 set 元素的迭代顺序. TreeSe ...

  8. 三十九、Java集合中的HashSet和TreeSet

    @Author:Runsen @Date:2020/6/6 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  9. 面试官系统精讲Java源码及大厂真题 - 11 HashSet、TreeSet 源码解析

    11 HashSet.TreeSet 源码解析 更新时间:2019-09-16 19:37:35 成功的奥秘在于目标的坚定. --迪斯雷利 引导语 HashSet.TreeSet 两个类是在 Map ...

最新文章

  1. Kubernetes 必备工具:2021
  2. IntelliJ IDEA 2018.1新特性
  3. AtomicIntegerArray类详解
  4. linux安全检测及防护,Linux安全检测及防护-单选题.doc
  5. FileNotFoundError: [Errno 2] No such file or directory: 'traingingDigits/0_0.txt'
  6. Polynomial(2019南昌邀请赛)(拉格朗日插值)
  7. 清洁数据ploy n_清洁屋数据
  8. SpringMVC之@RequestMapping注解及其衍生注解详解
  9. “几乎看不见”的铰链!可折叠iPhone要来了?
  10. 微观角度上,宇宙膨胀的影响是什么?
  11. android 进度gif,Android NumberProgressBar:动态移动显示百分比进度的进度条
  12. python项目打包成whl文件
  13. 背景图片渲染时有色块怎么办
  14. 然之协同 PHP,然之协同办公系统5.2开源版官方下载
  15. 小纸条:阿里云资源分享站
  16. Python-常用数据结构(字典)-Dict
  17. AlphaGo之父戴密斯·哈萨比斯:是天才,也是生活里的普通人
  18. 禁用迅雷极速版自动升级为迅雷x
  19. 钉钉邮箱登录入口_钉邮的使用攻略②
  20. 什么是懦弱型人格?懦弱的原因和改变方法

热门文章

  1. java中synchronized的用法详解
  2. Python 微信机器人-用itchat库下载微信接收到的语音、图片等资源实例演示
  3. PyQt5 技巧篇-窗口置顶设置,如何使窗口始终显示在最前面
  4. 联合体在单片机中的应用
  5. 图像添加柯西分布噪声
  6. Power of Two
  7. linux gdal安装错误,CentOS8下安装GDAL最新版|rgdal安装失败解决方案
  8. matlab caxis 刻度,[求助]MATLAB画图问题,caxis.m的问题
  9. Java基础点——面向对象(中)
  10. Oracle 分组统计,抽取每组前十