社区
Java SE
帖子详情
HashSet内部是根据什么排序的??
a920123164
2011-12-04 11:21:03
虽说HashSet是无序的,也就是说存入的顺序和取出的顺序不一致,但是在HashSet内部却还是有顺序的,因为每次将HashSet集合对象迭代打印出来的顺序是一致的,那么内部是根据什么排序...求解?
...全文
1318
10
打赏
收藏
HashSet内部是根据什么排序的??
虽说HashSet是无序的,也就是说存入的顺序和取出的顺序不一致,但是在HashSet内部却还是有顺序的,因为每次将HashSet集合对象迭代打印出来的顺序是一致的,那么内部是根据什么排序...求解?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xf7633
2011-12-06
打赏
举报
回复
根据api的解释来讲:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它是按照hashcode来排序的。我用程序测试了下:如果set里面全是单个的字节,它就是按照hashcode的大小来排序,可是不是的话,它的排序就变得不能理解,但是肯定是根据hsahcode来排序的。代码如下
java code:
package collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class TestHashSet {
static Set<String> set = new HashSet<String>();
public static void test(){
set.add("A");
set.add("C");
set.add("BC");
set.add("123");
Iterator<String> it = set.iterator();
while(it.hasNext()){
String element = it.next();
System.out.println(element+""+element.hashCode());
}
}
public static void main(String[] args){
test();
}
}
zhouYunan2010
2011-12-06
打赏
举报
回复
大哥,HashSet是基于HashMap实现的,HashSet的元素是HashMap的键,这样就能去重。
顺序就是HashMap中元素的顺序。
hq333
2011-12-05
打赏
举报
回复
HashSet内部的存储是由hash函数定的,例如:
13,11,5,7,19;hash函数假设是%9,运算得:4,2,5,7,1,那么地址1是19,地址2是11,地址4是13,地址5是5,地址7是7。
真正的hash函数较复杂,它要尽量保证两个数运算后,得到的值不一样,如相同,则属于冲突,由一冲突程序处理。
hq333
2011-12-05
打赏
举报
回复
哈希表的基本思想是:以线性表中每个元素的关键字key为自变量,通过一定的函数关系h(key)计算出函数的值,把这个值作为数组的下标,将元素存入对应的数组元素中。
fuqinyijiu
2011-12-05
打赏
举报
回复
是hashcode,
luckdjc
2011-12-05
打赏
举报
回复
是根据Hashcode 哈希值确定的 编写很多类都需要重写HashCode()方法 不然你排序的时候会出现混乱
liyang36939
2011-12-05
打赏
举报
回复
hash算法
luochengor
2011-12-05
打赏
举报
回复
HashSet就是采用哈希算法存取对象的集合,它内部采用对某个数字n进行取余的方式对哈希码进行分组和划分对象的存储区域。Object类中定义了一个hashCode()方法来返回每个Java对象的哈希码,当从HashSet集合中查找某个对象时,Java系统首先调用对象的hashCode()方法获得该对象的哈希码,然后根据哈希码找到相应的存储区域,最后取出该存储区域内的每个元素与该对象进行equals方法比较,这样不用遍历集合中的素有元素就可以的到结论。可见,HashSet集合具有很好的对象检索性能,但是,HashSet集合存储对象的效率相对要低些,因为向HashSet集合中添加一个对象时,要先计算出对象的哈希码和根据这个哈希码确定对象在集合中的存放位置。
xiongyu2006
2011-12-04
打赏
举报
回复
HashSet是无序的,如果你要排序的set那么用TreeSet。Set的内部实现都是使用了Map.你可以看看JDk的源码.
daijope
2011-12-04
打赏
举报
回复
hash值吧,很好的问题。看看源代码更确定。
每个对象都有hashCode()这个方法,是继承自Object的,所有根据hash值来排序是很合理的。
HashSet
排序
本文介绍了如何对Java中的
HashSet
进行
排序
,包括将
HashSet
转换为TreeSet按特定属性
排序
,以及转换为ArrayList后按索引
排序
。通过示例代码详细展示了Person类的重写方法以及
排序
过程。
对
HashSet
进行
排序
本文介绍两种对
HashSet
进行
排序
的方法:一种是将其转换为List并使用Collections.sort()方法;另一种是通过TreeSet来直接
排序
。
HashSet
内部
的自动
排序
和去重原理
本文解析了
HashSet
内部
实现机制,重点介绍了
HashSet
如何通过hashcode和equals方法自动去除重复元素,而非简单使用等号比较。此外,还提到了
Hashset
内部
排序
采用ASCII码的方式。
如何对
HashSet
进行
排序
本文介绍了四种对
HashSet
进行
排序
的方法,包括转换为List并
排序
、利用TreeSet实现
排序
、使用Java 8的Stream API进行
排序
以及结合TreeSet与Java 8的Collectors。每种方法都附带了详细的代码示例。
Java 8 如何对
HashSet
元素进行
排序
本文聚焦Java中
HashSet
排序
。先介绍
HashSet
基本概念,包括无序性、唯一性及基于哈希表的良好性能。接着阐述
排序
方式,如将其转换为List用Collections.sort()
排序
、用TreeSet
排序
、用Stream API
排序
,还提及用Comparator自定义
排序
,最后给出不同场景下的方法选择建议。
Java SE
62,622
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章