Day20 比较器、set、map、散列

Java Set底层原理与生产级选型指南 Set是Java集合框架中表达‘唯一性’与‘成员关系’的核心抽象,其设计根植于数学集合概念,通过哈希表、红黑树、跳表等数据结构实现不同行为契约。理解hashCode与equals协同机制、fail-fast迭代器原理、以及各实现类(HashSet/TreeSet/LinkedHashSet/ConcurrentSkipListSet)的时间复杂度与内存特性,是避免线上contains失效、排序异常、并发不一致等高频问题的关键。在电商去重、实时风控、日志窗口统计等典型场景中,选型错误可导致性能下降十倍甚至引发 阅读详情

1. Set 和 排序

1.1 概述

set特点:无序 不可重复, 添加顺序和取出顺序不一样
  
Set -> SortedSet -> TreeSet: 底层是红黑树,要添加的元素必须按照某个规则进行排序

1.2 TreeSet

1.2.1 概述

set特点:无序 不可重复, 添加顺序和取出顺序不一样
  
Set -> SortedSet -> TreeSet: 底层是红黑树,要添加的元素必须按照某个规则进行排序
 
数字 默认升序, 字符串 默认比较每一位的ASCII码值,时间默认自然日期(昨天,今天,明天,后天...)

1.2.2 使用

 

1.2.3 为什么会排序?其他类型行不行?

为什么String, Integer , Date 能排序?其他类型不行
          因为他们三个类都实现了Comparable 接口 并实现了二compareTo()方法
          而 往treeSet中添加数据的时候,会自动调用该对象的compareTo方法,因此他们可以排序
          但是如果我们想添加其他元素,尤其是自定义类型的时候,就不行了,需要实现                         Comparable接口 并实现了compareTo()方法
                 

 

1.2.4 树 

1.2.4.1 二叉查找树

类似于二分法查找,查询效率比较高

左叶子 用于小于根节点的值

右叶子 永远大于根节点的值

这种方式是二分查找的思想,查询所需要的最大次数,等同于二叉树的高度

在添加数据的时候,也是类似的方式,一层层找,一直找到适合新节点的位置

但是二叉查找树也有问题

比如 一直添加比根节点小的或者大的数据

这样的话,虽然符合二叉查找树特性,但是性能大打折扣,几乎变成了线性的

1.2.4.2 红黑树

为了解决二叉查找树多次插入新节点而导致的不平衡,红黑树就诞生了

完全符合二叉查找的特性

1 节点是红色或者黑色

2 根节点一定是黑色

3 每个子节点都是黑色的空节点

4 每个红节点的两个子节点都是黑色(从每个叶子到根节点的路径上不能有连续两个的红色节点)

5 从任何节点到其每一个子节点都有相同数量的黑色节点

左旋转 : 逆时针旋转,父节点被右节点取代,而自己成为左节点

右旋转 : 顺时针旋转,父节点被左节点取代,而自己成为右节点

右边黑色数量多,就左旋转

左边黑色数量多,就右旋转

1.3 排序

1.3.1 概述
 

比较器类 有两种
                              1 java.lang.Comparable 接口 并实现 compareTo方法
                              2 java.util.Comparator 比较器类
 
  为什么 String , Integer  , Date 能排序? 其他类型行不行

          因为他们三个类都实现了Comparable接口 并实现了compareTo()方法 
          而 往treeSet中添加数据的时候,会自动调用该对象的 compareTo方法,因此 他们可以排序
          但是如果我们想添加其他元素,尤其是自定义类型的时候,就不行了,需要实现Comparable接口口并实现了compareTo()方法 

1.3.2 Comparrable

如果我们的自定义类型想要放到treeSet中,必须实现Comparable接口,否则就无法使用treeSet进行数据保存

1.3.3  Comparator

1.3.3.1 概述

 比如我们现在要保存 数字 , 并且是降序排序
 
  而Integer中 默认是升序,我们没有办法更改他的源码,
  所以可以使用Comparator解决该问题
  
  通过treeMap源码发现,Comparator优先级 大于 Comparable

 

1.3.3.2 使用 

 保存数字,并降序

1.3.4  Collections

list想要排序,元素必须实现comparable接口
  
  如果元素自身没有实现comparable接口,是不能调用sort方法的,会报错
  
  但是 想要比较也可以,不管他是否实现comparable接口,或者是排序规则不是我们想要的
  
  都可以使用comparator进行比较,那么sort方法有一个重载,接收comparator

1.3.5 总结

如果 添加的元素 是我们写的,那么我们应该使用comparable进行排序,因为对扩展开放,当满足不了别人需求的时候,人家还可以使用comparator进行扩展

如果 添加的元素 不是我们写的,是别人写的,那么我们肯定不能更改人家的源码

此时我们可以通过comparator进行重新排序

因为comparator和comparable同时存在的时候,comparator优先级要高

1.4 HashSet

1.4.1 散列表

1 调用 key的hashCode方法生成hash值,所以记得重写

 

2 散列存储方式

3 生成数组索引

4 判断数组对应索引中是否有节点

5 没有节点 直接添加

6 有节点 判断是否存在当前元素

7 如果链表中节点个数大于等于8 就转为树

1.4.2 HashSet

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01 编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩ 阅读详情

相关推荐

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1272

几种Set的比较

HashSet:不保证元素的添加顺序,底层采用哈希表算法,查询效率高。判断两个元素是否相等equals方法返回为true要求hashCode值必须相等。即要求存入HashSet中的元素要覆盖equals方法和hashCode方法- LinkedHashSet是HashSet的子类,底层采用了哈希表算法以及链表算法,既保证了元素的添加顺序,也保证了查询效率。但是整体性能要低于HashSet- TreeSet不保证元素的添加顺序,但是会对集合中的元素进行排序。...

weixin_50518344的博客 715

Set及比较器的使用

要求:将5个学生姓名写入一个Set集合中,学生具有学号,姓名以及成绩列表等属性。学生以学号区分。(注意hashcode与equals的定义,排序依据学号进行)。构造函数中随机生成学生成绩(10个成绩)。定义不同的Comparator,分别按照成绩列表的最高分,最低分,平均分进行排序。求出学生成绩的最高分,最低分,平均分,并按照从高到低的顺序打印出学生的姓名及各类成绩。(实现类不同的接口)(注意hashcode与equals的定义,排序依据学号进行) 打印内容如下:

2021-07-16比较器、set、map、散射

1.Set和排序 1.1概述 set特点 : 无序 不可重复,添加顺序和取出顺序不一定一致 * * Set -> SortedSet -> TreeSet : 底层是红黑树,要添加的元素必须按照某个规则进行排序 数字 默认升序 , 字符串 默认比较每一位的ASCII码值 , 时间 默认自然日期(昨天,今天,明天,后天...) 1.2Treeset 1.2.1使用 public static void main(String[] args) throws ParseExc...

weixin_59544199的博客 202

跟着团子学SAP CO:熟练使用结果分析码实现各个场景下收入成本的匹配(一) KKA2/CJ88

PS模块中对财务顾问最难的点在于项目结算,特别是销售型的项目结算。针对客户型项目结算我列举了以下常见的收入成本匹配的一些场景: (1)在项目执行过程中会多次开票,但由于各期成本浮动很大(如前期可能只涉及一些人工、中期全是比较金额较大的材料费),所以希望开票的时候能通过合理的一些指标进行主营业务成本与主营业务收入的匹配。 (2)项目过程中会多次开票,开票确认主营业务收入时,直接将累计发生的实际成本结转为主营业务成本。 (3)项目过程中虽多次开票,但不确认收入,所有发生的实际成本月末计算为在制品,最后项目一次性

Lucas1211的博客 9534

FreeRTOS笔记(十五)FreeRTOS总结

文章目录01 - 裸机和FreeRTOS区别1.1 - 裸机1.2 - FreeRTOS1.3 - 区别02 - 对FreeRTOS的感受03 - 推荐 上一文链接:FreeRTOS笔记(十四)[简] 软件定时器、事件组、任务通知 01 - 裸机和FreeRTOS区别   学完FreeRTOS,应该要自己总结一下FreeRTOS和裸机的区别,宏观上说,FreeRTOS是一个运行在裸机上的微内核,...

单眼皮根号三的博客 4114

比较器、set

1.Set和排序 1.1概述 set特点:无序,不可重复,添加顺序和取出顺序不一定一致 set-->SortedSet-->TreeSet:底层是红黑树,要添加的元素必须按照某个规则进行排序 1.2 TreeSet 1.2.1使用 TreeSet treeSet = new TreeSet(); //数字按照升序排序 treeSet.add(5); treeSet.add(8); treeSet.add(1); treeSet.add(4); Systrm.out.print...

qq_53121574的博客 309

Xilinx Vitis HLS教程1--Vitis HLS概述[01/12]

Xilinx Vitis HLS教程[01/10]前言1. Vitis HLS简介1.1 软件工程师的设计原则1.1.1 简介1.1.2 吞吐量和性能1.2.3 架构问题1.2.4 FPGA编程的3大范式1.2.4.1 生产者-消费者范式1.2.4.2 流式数据范式1.2.4.3 流水线范式1.2.5 3种范式结合 前言 项目中使用到Xilinx Zynq UltraScale+ MPSoC ZCU102 开发板,领导指示研究"xilinx软件自带的c语言综合器"。对于一个硬件一窍不通的我来说,甚至不知道

B10030607的博客 5238

比较器、set、map、范型

一 set 1.1 set特点 set特点 : 无序 不可重复,添加顺序和取出顺序不一定一致 TreeSet : 存进去的元素,会按照某个规则进行排序, HashSet底层由HashMap实现,TreeSet底层由TreeMap实现 1.2 排序规则 数字 : 从小到大 字符串 : 每一位的ASCII 日期 : 自然日期 例子: public class Collection_01_Set_01 { public ...

weixin_48788281的博客 206

LMI线性矩阵不等式之非线性变量处理

​ 如果一个LMI线性矩阵不等式中的某项存在两个矩阵变量相乘,那么称该类情形为非线性矩阵不等式,而要直接求解时很困难的,而且LMI工具箱也无法求解非线性矩阵,所以需要通过变量替换法进行处理。 ​...

Mr.邹的博客 4550

OpenBmc开发2:构建开发环境

编译环境VMware + ubuntu 18.04 编译环境构建:参考OpenBmc开发1:构建开发环境 1、打开一个Ternimal,进入openbmc目录下 2、查看有哪些不同的编译配置 find meta-* -name local.conf.sample 可以看到如下编译配置 3、生成编译配置 插入TEMPLATECONF,上边查询到的配置有很多,但是有一些...

master 2万+

Java集合详解

一、数组和集合的比较 数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下: 1:数组能存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身! 2:数组容易固定无法动态改变,集合类容量动态改变。 3:数组无法判...

cheshang4180的博客 153

从传感器到执行-智能家居 Agent 的感知-决策-执行闭环

本文提出了一种面向智能家居的感知型Agent架构,通过"感知-决策-执行"的闭环系统实现智能化控制。感知模块整合多源传感器数据,决策模块基于规则或机器学习模型生成控制策略,执行模块完成设备操作。系统能够实时监测环境参数和用户状态,自动调节温度、照明等设备,提升家居舒适度。该架构可扩展为多模态感知与强化学习相结合的智能系统,为智慧家居发展提供技术基础。

一键难忘的博客 1122

Day20比较器、set、map、散列

Set和排序 特点:无序,不可重复,添加顺序跟取出顺序不一定一致 Set->SortedSort->TreeSet:底层是红黑树,要添加的元素必须按照某个规则进行排序 TreeSet 数字默认升序,字符串默认比较Ascii码值,时间默认自然日期(昨天,今天,明天,后天) 树 二叉查找树 类似于二分法查找,查询效率比较高 左叶子 用于小于根节点的值 右叶子 永远大于根节点的值 这种方式是二分查找的思想,查询所需要的最大次数,等同于...

fighting_cui的博客 143

AUTOSAR OS详细介绍及配置说明(更新版20240115)

AUTOSAR OS扩展了OSEK/VDX标准中的操作系统,所以本文结合OSEK/VDX的标准来介绍AUTOSAR OS,并借助Vector Configurator讲解AUTOSAR OS的配置。源于德语,英文意思是:“车载电子设备的开发系统和接口”,它是一个标准,用来产生嵌入式操作系统的规范,通讯协议栈,和汽车网络管理协议,也产生其他相关的规范。OSEK被设计来提供整车的各种电子控制单元的软件标准架构。

酒无忧的博客 1422

通过WorkVisual连接KUKA机器人的具体方法

通过WorkVisual连接KUKA机器人的具体方法

Robot_PLC_HMI_Automation 6843

day20 比较器、set、map、散列

1. Set 和排序 1.1 概述 set 特点: 无序、不可重复、添加顺序和取出顺序不一定一致。 Set --> SortedSet --> TreeSet :底层是红黑树,要添加的元素必须按照某个规则进行排序。 2 TreeSet 2.1 概述 set 特点: 无序、不可重复、添加顺序和取出顺序不一定一致。 Set --> SortedSet --> TreeSet :底层是红黑树,要添加的元素必须按...

wzhty125的博客 85

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Day 13

Day 13 一、LinkedList LinkedList 是一种可以在任何位置进行高效地插入和删除操作的有序序列。 LinkedList:底层用双向链表实现的 List。特点:查询效率低,增删效率高,线程不安全。 ArrayList:底层用数组实现的 List。特点:查询效率高,增删效率低,线程不安全。 常用 //addFirst 将指定元素插入此列表的开头 list.addFirst("嘿嘿"); System.out.println(list); //pollLast() 获取并移除此列表的第一

EggOfRookie的博客 170

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

稳稳当当学java之Set、泛型和Map(17)

19第十九章 Set、泛型和Map 1. 作业回顾 1.从键盘随机输入10个整数,保存到List中,并按照倒序排序,从大到小的顺序显示出来。 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class Day18HomeWork { public static void

weixin_42405054的博客 301

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Set、Map集合

实现类       (1)HashSet         采用的结构是数组加链表结构(哈希表)           无序:因为存放的位置是根据hashCode来计算的.           不能重复依据: hashCode   equals            hashCode要和equals兼容  为了提高性能              HashSet的存储原理 根据每个对

u010037865的博客 518

Java学习第20天学习日志

Day20 比较器、set、map、散列 Set和排序 Set特点:无序不可重复,添加和取出顺序不一定一致 Set->SortedSet->TreeSet:底层是红黑树,要添加的元素必须按照某个规则进行排序 TreeSet 概述 数字默认公开,字符串,默认比较每一位的ASCII码值,时间,默认自然日期 使用 TreeSettreeSet=newTreeSet(); //数字按照升序排序 treeSet.add(2)...

qq_53895159的博客 81

2021.7.16

Day20 比较器,set,map,散列 Set和排序 1.1概述 set特点:无序,不可重复,添加顺序和取出顺序不一定一致 Set->SortedSet->TreeSet:底层是红黑树,要添加的元素必须按照某个规则进行排序 1.2TreeSet 1.2.1概述 set特点:无序,不可重复,添加顺序和取出顺序不一定一致 Set->SortedSet->TreeSet:底层是红黑树,要添加的元素必须按照某个规则进行排序 数字默认升序,字符串默认比较每一位的ASCLL..

l13731380061的博客 110

Java学习第八天

数据结构就是值、数据在计算机存放的时候,以什么样的结构存放,根据不同的业务需求,选择不同的数据结构去完成业务。

cfy264269的博客 250

集合的特点

1 Set集合概述和特点 总结: * Set集合的特点 * 不允许存储重复的元素 * 没有索引 Set集合的基本使用 new HashSet<>(); 哈希值【理解】 总结: * 哈希值简介 * 用于计算存储元素的位置的. 提高存储元素和取出元素的效率的 * 如何获取哈希值 * hashCode() * 哈希值的特点 * 同一个对象的哈希值是一样的 ...

weixin_45818628的博客 660

Day-16

比较器、set、map、散列 1 TreeSet set特点 : 无序 不可重复,添加顺序和取出顺序不一定一致 TreeSet : 存进去的元素,会按照某个规则进行排序 1.2 使用方式 Set 可以使无序的数据输出成有序的. 注意 : 重复的数据添加不进去 2 排序 2.1Comparable TreeSet为什么可以排序? 因为添加的元素都实现了Comparable接口 在向T...

hhdxxy的博客 181

java中TreeSet的Comparator比较器的三种使用方法

java中treeset使用Comparator进行比较的三种方法1.让元素具备比较性。 比如我们比较两个人。我们定义一个person类,并且实现Comparable接口 例: public class Person implements Comparable{ private int age; private String name;public Person

zqr772791008的博客 1万+
上一篇: Day19 集合、List、链表、比较器
下一篇: Day21 Map、泛型
java_yangXL
博客等级 码龄5年 1粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值