java集合类(Set)

java HashSet 集合排序 java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。 立即下载

原文出自搬砖工,需要转载请注明出处。


Set也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复。Set的常用具体实现有HashSet和TreeSet类。

一、HashSet和TreeSet类的区别
HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用 的方法,Arrays则是对一个数组进行类似的操作。

二、Comparable接口和Comparator接口
在“集合框架”中有两种比较接口:Comparable接口和Comparator接口。像String和Integer等Java内建类实现Comparable接口以提供一定排序方式,但这样只能实现该接口一次。对于那些没有实现Comparable接口的类、或者自定义的类,你可以通过Comparator接口来定义您自己的比较方式。
1.Comparable接口:
int compareTo(Object o): 比较当前实例对象与对象o,如果位于对象o之前,返回负值,如果两个对象在排序中位置相同,则返回0,如果位于对象o后面,则返回正值。
JDK中实现了Comparable接口的类的排序方式
(1)按数字大小排序:BigDecimal,BigInteger,Byte, Double, Float,Integer,Long,Short
(2)按 Unicode 值的数字大小排序:Character
(3)按字符串中字符 Unicode 值排序:String
利用Comparable接口创建您自己的类的排序顺序,需要实现compareTo()方法。通常就是依赖几个数据成员的自然排序。同时类也应该覆盖equals()和hashCode()以确保两个相等的对象返回同一个哈希码。
2.Comparator接口:
若一个类不能用于实现java.lang.Comparable,或者不需要缺省的Comparable行为并想提供自己的排序顺序(可能多种排序方式),你可以实现Comparator接口,从而定义一个比较器。
(1)int compare(Object o1, Object o2): 对两个对象o1和o2进行比较,如果o1位于o2的前面,则返回负值,如果在排序顺序中认为o1和o2是相同的,返回0,如果o1位于o2的后面,则返回正值
注释:与Comparable相似,0返回值不表示元素相等。一个0返回值只是表示两个对象排在同一位置。由Comparator用户决定如何处理。如果两个不相等的元素比较的结果为零,您首先应该确信那就是您要的结果,然后记录行为。
(2)boolean equals(Object obj): 指示对象obj是否和比较器相等。
注释:该方法覆写Object的equals()方法,检查的是Comparator实现的等同性,不是处于比较状态下的对象。

三、SortedSet接口
1.集合框架提供了个特殊的Set接口:SortedSet,它保持元素的有序顺序。SortedSet接口为集的视图(子集)和它的两端(即头和尾) 提供了访问方法。当您处理列表的子集时,更改视图会反映到源集。此外,更改源集也会反映在子集上。发生这种情况的原因在于视图由两端的元素而不是下标元素 指定,所以如果您想要一个特殊的高端元素(toElement)在子集中,您必须找到下一个元素。
添加到SortedSet实现类的元素必须实现Comparable接口,否则您必须给它的构造函数提供一个Comparator接口的实现。TreeSet类是它的唯一一份实现。
2.因为集必须包含唯一的项,如果添加元素时比较两个元素导致了0返回值(通过Comparable的compareTo()方法或Comparator 的compare()方法),那么新元素就没有添加进去。如果两个元素相等,那还好。但如果它们不相等的话,您接下来就应该修改比较方法,让比较方法和 equals() 的效果一致。
3.常用函数:
(1) Comparator comparator(): 返回对元素进行排序时使用的比较器,如果使用Comparable接口的compareTo()方法对元素进行比较,则返回null
(2) Object first(): 返回有序集合中第一个(最低)元素
(3) Object last(): 返回有序集合中最后一个(最高)元素
(4)SortedSet subSet(Object fromElement, Object toElement): 返回从fromElement(包括)至toElement(不包括)范围内元素的SortedSet视图(子集)
(5) SortedSet headSet(Object toElement): 返回SortedSet的一个视图,其内各元素皆小于toElement
(6) SortedSet tailSet(Object fromElement): 返回SortedSet的一个视图,其内各元素皆大于或等于fromElement

四、AbstractSet抽象类
AbstractSet类覆盖了Object类的equals()和hashCode()方法,以确保两个相等的集返回相同的哈希码。若两个集大小相等 且包含相同元素,则这两个集相等。按定义,集的哈希码是集中元素哈希码的总和。因此,不论集的内部顺序如何,两个相等的集会有相同的哈希码。

五、Set有关类的常用函数
1.HashSet的常用函数:
(1)HashSet(): 构建一个空的哈希集
(2)HashSet(Collection c): 构建一个哈希集,并且添加集合c中所有元素
(3)HashSet(int initialCapacity): 构建一个拥有特定容量的空哈希集
(4)HashSet(int initialCapacity, float loadFactor): 构建一个拥有特定容量和加载因子的空哈希集。LoadFactor是0.0至1.0之间的一个数
2.TreeSet的常用函数:
(1)TreeSet():构建一个空的树集
(2)TreeSet(Collection c): 构建一个树集,并且添加集合c中所有元素
(3)TreeSet(Comparator c): 构建一个树集,并且使用特定的比较器对其元素进行排序
(4)TreeSet(SortedSet s): 构建一个树集,添加有序集合s中所有元素,并且使用与有序集合s相同的比较器排序
3.LinkedHashSet的常用函数
(1) LinkedHashSet(): 构建一个空的链接式哈希集
(2) LinkedHashSet(Collection c): 构建一个链接式哈希集,并且添加集合c中所有元素
(3) LinkedHashSet(int initialCapacity): 构建一个拥有特定容量的空链接式哈希集
(4) LinkedHashSet(int initialCapacity, float loadFactor): 构建一个拥有特定容量和加载因子的空链接式哈希集。LoadFactor是0.0至1.0之间的一个数

六、Hash表简介
1.Hash表是一种数据结构,用来查找对象。Hash表为每个对象计算出一个整数,称为Hash Code(哈希码)。Hash表是个链接式列表的阵列。每个列表称为一个buckets(哈希表元)。对象位置的计算index = HashCode % buckets (HashCode为对象哈希码,buckets为哈希表元总数)。
2.当你添加元素时,有时你会遇到已经填充了元素的哈希表元,这种情况称为Hash Collisions(哈希冲突)。这时,你必须判断该元素是否已经存在于该哈希表中。
3.如果哈希码是合理地随机分布的,并且哈希表元的数量足够大,那么哈希冲突的数量就会减少。同时,你也可以通过设定一个初始的哈希表元数量来更好地控制哈 希表的运行。初始哈希表元的数量为buckets = size * 150% + 1 (size为预期元素的数量)。
如果哈希 表中的元素放得太满,就必须进行rehashing(再哈希)。再哈希使哈希表元数增倍,并将原有的对象重新导入新的哈希表元中,而原始的哈希表元被删 除。load factor(加载因子)决定何时要对哈希表进行再哈希。在Java编程语言中,加载因子默认值为0.75,默认哈希表元为101。

N5105核显直通PVE:从黑屏到HDMI输出的完整指南 PCI直通能让虚拟机独占物理设备,但核显直通远没有独显那么轻松。Intel核显与CPU、显示输出链路的强耦合使UEFI引导、GOP驱动、驱动签名等环节都成了黑屏陷阱。在PVE虚拟化环境中,通过IOMMU开启、vfio-pci绑定、OVMF固件和Q35机型配合,可以绕过KVM检测,让Windows虚拟机正确驱动核显,从HDMI口输出画面,并解锁Intel Quick Sync硬解能力。这种方案尤其适合N5105等低功耗迷你主机,可作为客厅HTPC、本地视频硬解或依赖硬件加速的轻量工作台。本文基于N5105平台 阅读详情

相关推荐

ESP32-C5 Wi-Fi CSI感知技术原理与工程实践

Wi-Fi信道状态信息(CSI)是OFDM系统中反映多径信道特性的复数频域响应,源于导频子载波的信道估计过程,本质属于物理层原始观测数据。其高维度(如56子载波)、高时间分辨率(百赫兹级采样)及零硬件增益的特性,使其成为无感人体感知的理想信号源。相比UWB或毫米波雷达,CSI方案依托现有Wi-Fi基础设施,兼具成本优势与部署灵活性,广泛应用于呼吸监测、跌倒检测、手势识别等边缘智能场景。乐鑫ESP32-C5通过5.8GHz低噪接收、亚纳秒级多天线同步与固件级CSI增强,显著提升微动感知鲁棒性,结合AGC锁定、

weixin_42153793的博客 343

对HashSet进行排序

两种办法 1转成List进行排序 2转成TreeSet进行排序 package com.cc.cc; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.TreeSet; public class

超超超超哥的博客 1万+

文档多模态识别工具对比:MinerU、PaddleOCR、Marker

本文对比了三款文档多模态识别工具:MinerU、PaddleOCR和Marker。MinerU专注于中文文档的端到端解析,支持复杂元素提取和结构化输出,适合中文论文和教材解析。PaddleOCR是通用OCR工具包,支持多语言和全流程任务,适用于发票、车牌等图像OCR。Marker则注重多语言支持和轻量化部署,适合英文论文和技术文档的快速转换。三者在核心技术、中文优化、表格处理、输出格式、部署复杂度和适用语言等方面各有优劣。选型建议根据具体需求:MinerU适合高精度中文解析,PaddleOCR适合定制化OC

朴拙科技的博客 4744

如何对HashSet进行排序

如何对HashSet进行排序HashSet排序方案一方案二方案三方案四 HashSet排序 对于列表,我们使用该Collections.sort(List)方法。如果我们想要排序HashSet怎么办? 方案一 HashSet不保证其元素的任何顺序。如果您需要此保证,请考虑使用TreeSet来保存元素。 但是,如果您只需要为这一次出现排序的元素,那么只需临时创建一个List并对其进行排序: Set<?> yourHashSet = new HashSet<>(); List<?&

sd15600759867的博客 1万+

通俗易懂的图解二叉搜索树、AVL树和红黑树

搜索是一种很常见的需求,当数据较多时,如何找到目标对象时,即需要搜索查找。 那么如何快速找到目标呢,最朴素的思想就是暴力查找,一个一个对比。 显然,当数据量增大时,我们需要优化查找方法获取更快的查找速度,我们可以通过维护一个有序数组,从而实现二分查找,查找速度从O(n)降为O(longn)。 但是数组并不便于插入和删除,链表便成为了最好的选择。 既然是采用二分查找,那么不如直接按照查找的步骤维护一种数据结构,于是二叉搜索树出现了。 二叉搜索树的性质为: 若左子树不为空,则左子树上所有节点值都小于根结点值;

暗色光的博客 758

用友U8登录慢卡顿?别急着重启服务器,先检查UA_Message这张表(附SQL清理脚本)

本文针对用友U8登录慢卡顿问题,深入分析UA_Message表积压消息对系统性能的影响,并提供SQL清理脚本和优化方案。通过诊断、清理、索引优化和预防措施四步法,显著提升U8客户端登录速度,适用于后台管理和数据库维护场景。

weixin_28726671的博客 380

第六章 集合(三)

Set接口主要有两个实现类,分别是HashSet和TreeSet。其中HashSet是根据对象的散列值来自确定元素在集合中的存储位置,具有良好的存取和查找性能。HashSet是以二叉树的方式来存储元素,它可以实现对集合中的元素进行排序。...

Yuns_的博客 489

MAIXCAM无线连接实战:5分钟搞定远程调试与代码烧录(避坑版)

本文提供了一份详细的MAIXCAM无线连接实战指南,帮助嵌入式视觉开发者快速配置远程调试与代码烧录。文章重点介绍了通过MaixHub IDE进行Wi-Fi配置、建立远程终端连接、使用SFTP进行文件传输以及管理自启动应用程序的完整流程,并针对IP地址变动、信号中断等常见问题提供了实用的避坑解决方案,旨在提升开发效率与灵活性。

weixin_29188043的博客 297

Java实现1到100得排序,Java8 HashSet让排序更简单

背景当我们谈起Java8新特性时(相较于Java7),受关注最多的往往是lambada表达式、方法引用等,但其实对我们一些不易察觉的优化点正切实影响着我们的编程方式。例如,本文要讲的HashSet元素顺序。众所周知,List保证元素的添加顺序,元素可重复Set不保证元素的添加顺序,元素不可重复但“不保证有序”≠“保证无序”,且此处的“有序”指的是“元素添加顺序”,也就是说不能信任HashSet对元...

weixin_31423211的博客 720

2006NOIP普及组真题 4. 数列

从上述推理中,我们发现要输出的幂次和中的第 N 项(也就是幂次和中的序号N),对应的二进制位数和幂次和对应的二进制位数相同。当 k=3 时,k的幂次为1, 3, 9, 27, 81…,即第0位,第2位均为1,转成 k 进制(k=3)时。,即第2位,第3位均为1,转成 k 进制(k=3)时。转成 k 进制(k=3)时的幂次和为。,即第0位,第1位,第2位均为1,(即第0位,第1位,第2位均为1)N=12时,12的二进制是。(即第0位,第2位均为1)(即第2位,第3位均为1)结论:这道题就变成了。

weixin_40252159的博客 1514

HarmonyOS 鸿蒙开发DevEco Studio OpenHarmony:安全测试

通过对HarmonyOS应用生命周期建模和应用攻击面建模,采用静态数据流分析技术,提高漏洞发现的准确率,同时覆盖20余种攻击面,65+漏洞测试项,帮助开发者提前发现和识别漏洞隐患。在检测报告中,会针对每一项漏洞风险项给出明确的修复建议,可以帮助开发者快速修复漏洞。

斌擎科技 1181

【Java集合类】之 Set 集合

一个不包含重复元素的 collection。**更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象

鱼干的博客 1750

AI驱动的客户终身价值分析:深入理解公司的收入质量

客户终身价值(Customer Lifetime Value, CLV)是衡量客户在整个生命周期内能为企业带来多少利润的重要指标。传统的CLV计算方法往往过于简化,无法准确反映复杂的客户行为和收入模式。本文旨在介绍如何利用人工智能技术,特别是机器学习方法,构建更精确的CLV预测模型,从而帮助企业深入理解其收入质量。CLV的基本概念和商业意义传统CLV计算方法的局限性基于机器学习的CLV预测方法特征工程和模型选择策略实际应用案例和Python实现首先介绍CLV的基本概念和商业背景。

AI云原生与云计算技术学院 477

java Set集合类

Set集合类 1. 基本使用 特点: 无序无重复、建-值 方式存储、key不重复,重复时以最后一次修改为准、value可以重复 map key-value index-object put(objcet) 添加,当key值相同时相当于修改 get(key) 得到 remove(index) 删除 size() 长度 toString() 可视化 package unit_o...

怪猫訷的博客 223

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pscad IEEE标准系统搭建说明

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

Java的集合类:List、Set、Map

Java 中的集合类可以分为 List、Set 和 Map 三个主要类别。在使用集合类时,请注意选择适当的实现类,并根据需要使用 List、Set 和 Map 接口。同时,还要注意集合类的动态性,以便在运行时动态调整其大小。

小虎哥的技术博客 787

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java集合类: Set、List、Map、Queue区别及应用

Java集合类基本概念 Java集合类架构层次关系 Java集合类的应用场景代码

专注自动化、性能测试、测试架构学习交流 3124

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java集合类-List Set Map接口

需要注意的是,在不同的编程语言中,List集合的实现可能会有所不同,具体的方法和用法可能会有所区别。List集合是一种常见的数据结构,它可以存储多个元素,并且这些元素的顺序是有序的。通过双向链表连接插入的元素,可以保留插入顺序,并提供按插入顺序或访问顺序遍历元素的能力。1.添加元素:可以使用add()方法将元素添加到List集合的末尾,也可以使用add(index, element)方法将元素插入到指定的位置。//删除指定的对象元素,如果集合中存在多个相同的元素,则只删除第一个匹配的元素。

T_xyLL的博客 188

Java集合类:Set、List、Map、Queue 详解

Java集合类: Set、List、Map、Queue使用场景梳理 相关学习资料 http://files.cnblogs.com/LittleHann/java集合排序及java集合类详解(collection、list、map、set).rar http://blog.sina.com.cn/s/blog_a345a8960101k9vx.html http://f51889920.iteye...

CHANGE ING的博客 641

Java集合类详解:List、Set、Queue、Map、Stack的特点与用法

在Java中,集合类(Collections Framework)是一个非常重要的部分,它提供了多种数据结构的实现,以便我们在开发中更方便地管理和操作数据。 本文将详细介绍Java中的几种主要集合类:List、Set、Queue、Map和Stack的特点和用法。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6783

java集合类set类_java集合类的Set总结:

展开全部1. Set实现的基础是Map(HashMap);2. Set中的元素是不能重复的e69da5e6ba903231313335323631343130323136353331333361303066,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象为什么要使用集合类当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集...

weixin_28828243的博客 437

Java集合类中的List、Set和Map及其实现类的详细介绍

本文主要介绍了Java集合类中的List、Set和Map及其实现类的概念和特点,并在最后对实现类是否可以为null值做了总结

青灯文案的博客 2069

Java集合类之List,Set探究

Collection是一个顶层的接口,在集合类中还有Map也属于顶层接口(参考Java集合类之Map探究),本文通过一张类图描述List和Set的基本结构。 类图解析: Collection是一个顶层的接口,定义了一系列方法,List和Set是继承自Collection的接口。 每个Collection都可以产生一个Iterator(参考Java iterator与ite

zhao123h的专栏 1010

java集合类set类,整理比较Java集合类(List,Set, Map)

Java集合类(Collection):集合类(Set和list)存放在java.util包中,都实现了Collection接口,Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类.让其被继承产生了两个接口,就是Set和List.Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分. List⭐️L...

weixin_36470210的博客 160

Java集合类List、Set、Map总结

2、常用方法:put(K key, V value)、get(Object key)、keySet()、remove(K key)、entrySet()等。​ Set接口的实现类,实现了SortSet接口,底层采用****红黑树****算法,TreeSet只能存储相同类型的对象的引用。​ 底层的数据结构是是****数组array****,与ArrayList相同,查询速度快,增删改慢。​ 实现了SortedMap接口,是一个有序的集合,底层是红黑树结构,

st3pby的博客 281

Java集合类的list set map的理解运用

1.什么运用情景使用集合 集合:用于集中存放多个数据。如果我们事先知道我们要保存的数据量,那么数组是个很好的选择,一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,那么如果我们需要保存一个可以动态增长的数据(在编译时无法确定具体的数量),就需要用到java的集合类了。 集合和数组的区别 数组是固定长度的;集合可变长度的。 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。 数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。 2.集合类 所有集合类都

jadeliuliu的博客 274

java集合类(Set、Map、List)

集合类概述 java.util包中的集合类就像一个装有多个对象的容器,提到容器就不难想到数组,数组与集合的不同之处在于:数组的长度是固定的,集合的长度是可变的;数组既可以存放基本数据类型大数据,又可以存放对象,集合只能存放对象。集合类包括List集合、Set集合和Map集合,其中List与Set继承了Collection接口,且List接口、Set接口和Map接口还提供了了不同的实现类,List...

qq_31755183的博客 592
上一篇: wordpress实现文章阅读次数
下一篇: Tomcat配置Web程序几种方式
海之沐
博客等级 码龄12年 1536粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值