Set实现类性能对比

Set接口的实现类:
共同的特点:
1):都不允许元素重复.
2):都不是线程安全的类.

解决方案:Set s = Collections.synchronizedSet(Set对象);

HashSet: 不保证元素的先后添加顺序.
底层才有的是哈希表算法,查询效率极高.
判断两个对象是否相等的规则:
1):equals比较为true.
2):hashCode值相同.

             要求:要求存在在哈希中的对象元素都得覆盖equals和hashCode方法.

LinkedHashSet:
HashSet的子类,底层也采用的是哈希表算法,但是也使用了链表算法来维持元素的先后添加顺序.
判断两个对象是否相等的规则和HashSet相同.
因为需要多使用一个链表俩记录元素的顺序,所以性能相对于HashSet较低.
一般少用, 如果要求一个集合既要保证元素不重复,也需要记录添加先后顺序,才选择使用LinkedHashSet.

TreeSet:不保证元素的先后添加顺序,但是会对集合中的元素做排序操作.
底层才有红黑树算法(树结构,比较擅长做范围查询).
TreeSet要么才有自然排序,要么定制排序.

             自然排序:  要求在TreeSet集合中的对象必须实现java.lang.Comparable接口,并覆盖compareTo方法.定制排序:  要求在构建TreeSet对象的时候,传入一个比较器对象(必须实现java.lang.Comparator接口).在比较器中覆盖compare方法,并编写比较规则.TreeSet判断元素对象重复的规则:compareTo/compare方法是否返回0.如果返回0,则视为是同一个对象.

HashSet做等值查询效率高,TreeSet做范围查询效率高.
而我们更多的情况,都是做等值查询, 在数据库的索引中做范围查询较多,所以数结构主要用于做索引,用来提高查询效率.
这里写图片描述

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

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

相关文章

RSocket协议初识

文章目录前言RSocket是什么?RSocket设计目标是什么?RSocket与其他协议有什么区别?对比Http1.x对比Http2.x对比grpc对比TCP对比WebSocket结论RSocket适用于哪些场景?1、移动设备与服务器的连接。2、微服务场景。3、由于微服务和移动…

HugeGraph Server/Hubble安装使用

文章目录HugeGraph Server1 概述2 依赖2.1 安装JDK-1.83 部署3.1 下载tar包4 安装启动4.1 解压4.2 配置Hbase5 访问Server5.1 服务启动状态校验6 停止Server7 多图配置HugeGraph-Hubble 基于Web的可视化图形界面1.概述2.安装3 使用3.1创建图HugeGraph Server 1 概述 HugeGrap…

Socket模型

两种I/O模式 一.选择模型 二.异步选择 三.事件选择 四.重叠I/O模型 五.完成端口模型 五种I/O模型的比较 两种I/O模式 1、 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序。套接字默认为阻塞模式。可以通过多线程技术进行处…

数据结构实验之二叉树的建立与遍历

题目描述 已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。 输入 输入一个长度小于50个字符的字符串。输出 输出共有4行: 第1行输出…

Mysql 集群双主双从安装使用详细讲解

文章目录下载Mysql安装单机Mysql配置Mysql集群双Master配置master1配置master2配置配置说明双Slave配置Slave1配置Slave2配置双 Master 机上创建账号,并授权远程复制查询Master1的状态查询Master2的状态双Slave机上执行 change master 同步Master数据Slave1 复制 Ma…

vs2010常见错误记录

(1)在Debug模式下正常,在Release模式下程序出现异常 可能原因:配置的链接dll有问题,后缀带d和不带d混淆;在Release模式下类中的变量不会自动进行初始化,需要手动初始化;

java中的IO操作之File类

Java的集合框架: 类和接口存在于java.util包中. Java的IO: 类和接口存在于java.io包中. 学习方法: 文档在手,天下我有! ----------------------------------------------------------------------------------------- 讲IO操作之前,必须要先讲File类(文件/目录…

数据结构实验之二叉树三:统计叶子数

题目描述 已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。 输入 连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。 输出 输出二叉树的叶子结点个数。 示例输入 ab…

企业需要的C++程序员

今天对智联招聘网站和前程无忧招聘网站对“任职要求"一栏进行了相关技术要求作了简要的统计,主要提取的是在任职要求中明确提到的信息,招聘城市针对长沙和深圳,招聘公司为随机抽取,列了以下技术要求出现的次数。希望在自己的…

ElasticSearch 新增节点,横向扩容

文章目录查看当前ES状态新增节点配置遇到的问题查看当前ES状态 这里默认都是在Kibana进行操作 GET _cluster/health{"cluster_name" : "bjga-gz","status" : "yellow","timed_out" : false,"number_of_nodes" :…

输入和输出(IO)概述

什么是IO:(Input/Output):输入和输出. IO设备: 和电脑通信的设备. 输入设备:麦克风,扫描器,键盘,鼠标等. 输出设备:显示器,打印机,投影仪,耳机,音响等. 为什么程序需要IO呢? 案例1:打游戏操作,得分比较高,存储游戏的信息(XXX-888分). 此时需要把游戏中的数据存储起来,只能…

求二叉树的深度

题目描述 已知一颗二叉树的中序遍历序列和后序遍历序列&#xff0c;求二叉树的深度。 输入 输入数据有多组&#xff0c;输入T组数据。每组数据包括两个长度小于<font face"\"Times" new"" roman,"" serif\""" style"…

优秀的程序员怎么做

我觉得优秀的程序员&#xff0c;不仅优秀在代码上&#xff0c;更重要在思维等方面。 我认为一个优秀程序员是谨慎的&#xff0c;在有需求与任务时&#xff0c;会不断的澄清需求与任务&#xff0c;并且多次确认想要的结果&#xff0c;而非闷头听着或者看着需求与任务列表。 我…

Linux 挂载磁盘目录

文章目录查看Linux磁盘信息格式化磁盘挂载修改重启后自动挂载fstab 文件格式介绍卸载查看Linux磁盘信息 [rootb001 ~]# fdisk -lDisk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors Units sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 by…

linux学习路线

很多同学接触Linux不多&#xff0c;对Linux平台的开发更是一无所知。而现在的趋势越来越表明&#xff0c;作为一个优秀的软件开发人员&#xff0c;或计算机IT行业从业人员&#xff0c;掌握Linux是一种很重要的谋生资源与手段。下来我将会结合自己的几年的个人开发经验&#xff…

java中有关文件流的操作

文件流: 顾名思义,程序和文件打交道. 此时我们谈及的文件,值得是纯文本文件(txt的,不要使用Word,Excel), 在字节流中,暂时不要使用中文. FileInputStream: 文件的字节输入流 FileOutputStream: 文件的字节输出流 FileReader:文件的字符输入流 FileWriter:文件的字符输出流…

数据结构实验之二叉树一:树的同构

题目描述 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2&#xff0c;则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的&#xff0c;因为我们把其中一棵树的结点A、B、G的左右孩子互换后&#xff0c;就得到另外一棵树。而图2就不是同构的。 图1 …

Linxu服务器文件双向同步 rsync+sersync 详细讲解

文章目录Linxu服务器文件双向同步 rsyncsersync基础信息安装rsync安装配置根据配置文件创建相应的目录、文件、防火墙规则创建需要同步的目录创建同步用户防火墙启动rsyncd服务测试异常处理sersync安装sersync配置test21配置test22配置sersync启动test21启动test22启动测试新增…

resize和reverse的区别

首先&#xff0c;两个函数的功能是有区别的&#xff1a; reserve是容器预留空间&#xff0c;但并不真正创建元素对象&#xff0c;在创建对象之前&#xff0c;不能引用容器内的元素&#xff0c;因此当加入新的元素时&#xff0c;需要用push_back()/insert()函数。 resize是…

数据结构实验之二叉树五:层序遍历

题目描述 已知一个按先序输入的字符序列&#xff0c;如abd,,eg,,,cf,,,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。 输入 输入数据有多行&#xff0c;第一行是一个整数t (t<1000)&#xff0c;代表有t行测试数据。每行是一个长度小于50个字符的字符串。输出 …