hashSet与treeSet的去重原理

hashSet与treeSet的去重原理

1、TreeSet去重原理 :compareTo
可以实现排序及去重:如果compareTo返回0,说明是重复的,返回的是自己的某个属性和另一个对象的某个属性的差值,如果是负数,则往前面排,如果是正数,往后面排;
应用:放入TreeSet中的对象,类必须实现compareable接口,覆写其compareTo方法,根据自己的需要改变其排序及去重规则,比如职员类,根据其工资水平进行去重和排序 。

public class TestUser implements Comparable<TestUser>{...@Overridepublic int compareTo(TestUser testUser) {...return ...;}
}TreeSet<TestUser> sets = new TreeSet<>();
//必须实现Comparable接口,否则会报错
sets.add(new TestUser());

2、hashSet去重原理:1,hashCode 2,equals是否相同

我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数

当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象
如果没有哈希值相同的对象就直接存入集合,如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存

将自定义类的对象存入HashSet去重复 ◦类中必须重写hashCode()和equals()方法
hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php mysql group by_php – 如何在mysql查询中解决“不在GROUP BY中”错误

我有两个模型&#xff1a;帖子和喜欢有一对多的关系(所以,一个帖子有很多喜欢). Likings模型还有一个isActive字段,表示喜欢是主动还是被动.我想获得(排序)前5个帖子,这些帖子已经收到了最大的“活跃”喜欢(只有喜欢其isActive字段为true的帖子才会被考虑).这是查询&#xff1a…

排序实训问答

排序 注意事项&#xff1a; 问&#xff1a;你这排序怎么会出现两个0毫秒 或者怎么会出现0毫秒的现象呢&#xff1f; 答&#xff1a;在计算机中&#xff0c;时间的计算是以毫秒为单位的。当两个时间间隔非常短&#xff0c;小于1ms时&#xff0c;计算机可能会将时间计算为0毫秒…

git stash 缓存 简介

当我们在使用git的时候&#xff0c;又是会有这种情况&#xff1a;当新的需求了的时候。我们需要为此需求新建一个分支&#xff0c;再次分支上进行修改&#xff0c;当经过测试&#xff0c;提交代码时&#xff0c;在将其合并到主分支&#xff0c;或生产分支上。 但是有时候也有失…

java jsp session_JSP中Session的使用

你的session对象ID是&#xff1a;int Num 0; //定义前面要加!号synchronized void countPeople() { //同步方法Num;}%>if (session.isNew()) { //推断是否为新用户countPeople();String str String.valueOf(Num);session.setAttribute("count", str); //将str 加…

java中的线程池有哪些,分别有什么作用?

java中的线程池有哪些&#xff0c;分别有什么作用&#xff1f; 1.进程-线程简单介绍 2.java的线程池是什么&#xff0c;有哪些类型&#xff0c;作用分别是什么 3.使用线程池的优点 1.进程-线程的简单介绍 进程 什么是进程呢&#xff1f; 进程是计算机中的程序关于某数据集合…

二进制编译安装mysql_二进制编译安装mysql

1:解压包及做链接# tar xvf mysql-5.5.13-linux2.6-i686.tar.gz -C /usr/local# cd /usr/local# ln -sv mysql-5.5.13-linux2.6-i686 mysql# cd mysql---------------------------------------------------------------2:增加用户mysql及创建数据库数据存放目录/mydata/data# g…

线程安全的集合类有哪些?

验证ArrayList线程不安全 ArrayList 应当是开发中用到的最多的集合类&#xff0c;是动态列表&#xff0c;List 接口的实现类。 多数情况下&#xff0c;我们实在单线程环境使用&#xff0c;或者是在方法内部&#xff0c;以局部变量的形式使用&#xff0c;一般不会出现线程安全问…

try-catch-finally的执行顺序

try-catch-finally的执行顺序 结论&#xff1a; 不管有没有出现异常&#xff0c;finally代码块都会执行&#xff1b;不管try和catch的代码块中有return时&#xff0c;finally仍会执行&#xff0c;且如果finally代码块也有return&#xff0c;则此代码肯定会返回finally执行的r…

java jdbc mysql url_java – 如何生成JDBC数据库URL?

我今天已经研究了大约3个小时,我觉得我很接近,但我有几个问题.我到目前为止找到的最好的信息来源是&#xff1a;https://stackoverflow.com/a/2840358,但它没有回答我的所有问题.一点背景&#xff1a;我正在使用Microsoft SQL Server 2014,并且我已经验证了IP地址127.0.0.1处于…

try catch finally 中包含return的几种情况,及返回结果

第一种情况&#xff1a;在try和catch中有return&#xff0c;finally中没有return&#xff0c;且finally中没有对try或catch中要 return数据进行操作的代码&#xff0c;这种情况也是最好理解的。 public class Test {public static int num1;public static void main(String[] …

java jp2launcher.exe_芯科cp2112有熟悉的吗?配置不能保存是什么原因?

文件夹PATH列表卷序列号为2474-602AC:.├─CP2112_SDK│ │ ReleaseNotes.txt│ ││ ├─Documentation│ │ ├─ApplicationNotes│ │ │ an495.pdf│ │ │ an496.pdf│ │ ││ │ ├─Datasheets│ │ │ CP2112.pdf│ │ ││ │ ├─Datash…

包装类的缓存问题

包装类的缓存问题 整型、char类型所对应的包装类&#xff0c;在自动装箱时&#xff0c;对于-128~127之间的值会进行缓存处理&#xff0c;其目的是提高效率。 缓存处理的原理为&#xff1a;如果数据在-128~127这个区间&#xff0c;那么在类加载时就已经为该区间的每个数值创建…

java中项目启动时加载_如何在项目启动时,加载或解析某配置文件

在web项目中有很多时候需要在项目启动时就执行一些方法&#xff0c;而且只需要执行一次&#xff0c;比如&#xff1a;加载解析自定义的配置文件、初始化数据库信息等等&#xff0c;在项目启动时就直接执行一些方法&#xff0c;可以减少很多繁琐的操作。在工作中遇到了项目初始数…

Shiro介绍及主要流程

Shiro介绍及主要流程 什么是Shiro Apache Shiro是一个强大且灵活的开源安全框架&#xff0c;易于使用且好理解&#xff0c;撇开了搭建安全框架时的复杂性。 Shiro可以帮助我们做以下几件事&#xff1a; 认证使用者的身份 提供用户的访问控制&#xff0c;比如&#xff1a; 决定…

java数据库程序实例_Java连接各种数据库的实例大全

1、Oracle8/8i/9i数据库(thin模式)Class.forName(“oracle.jdbc.driver.OracleDriver”)。newInstance()&#xff1b;String url“jdbc:oracle:thin:localhost:1521:orcl”;//orcl为数据库的SIDString user“test”;String password“test”;Connection conn DriverManager.get…

http的请求体body的几种数据格式

文章目录multipart/form-dataapplication/x-www-from-urlencodedrawbinarypostman中 Params和Body的区别multipart/form-data 以表单形式提交&#xff0c;主要是上传文件用它&#xff0c;在http中格式为 application/x-www-from-urlencoded 以键值对的数据格式提交 raw…

谷歌浏览器安装json格式化插件

谷歌浏览器安装json格式化插件 实际开发工作中经常用到json数据&#xff0c;那么就会有这样一个需求&#xff1a;在谷歌浏览器中访问URL地址返回的json数据能否按照json格式展现出来。 比如&#xff0c;在谷歌浏览器中访问&#xff1a;http://jsonview.com/example.json 展现…

java 俄罗斯方块窗口_[代码全屏查看]-java 俄罗斯方块

[1].[代码] [Java]代码package com;import java.awt.Color;import java.awt.Graphics;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Random;import javax.swing.JFrame;import javax.swing.JPanel;public class Eluos extends JFrame{p…

vue3.0中使用Element-plus默认英文组件修改为中文

vue3.0中使用Element-plus默认英文组件修改为中文修改方法 说明&#xff1a;本方法Element-plus 1.0.2-beta.59 之前的版本可以&#xff0c;1.0.2-beta.59之后版本请看下一篇博客 1,引入element // ! element-plus vue3.0 import element from element-plus import element-…

在java中null的作用_在java中避免使用!= null有什么好处?

使用空集合或“空白”操作而不是null的主要优点是,大多数情况下,此类对象仍然可以在代码中工作而无需进一步修改.从本质上来说,空值更容易出错.请使用以下代码,例如&#xff1a;String[] names data.getNames();if (names ! null) {for (String name : names) {// Do stuff}}需…