java – 为什么HashSet命令总是与我的程序相同?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 为什么HashSet命令总是与我的程序相同?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1162字,纯文字阅读大概需要2分钟。
内容图文
对于一些教程,他们说:
HashSet doesn’t maintain any order, the elements would be returned in any random order.
但是我写了一个测试程序,结果总是一样的.
import java.util.*;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<String> hs1 = new HashSet<String>();
hs1.add("a");
hs1.add("b");
hs1.add("c");
hs1.add("d");
hs1.add(null);
hs1.add(null);
System.out.println(hs1);
System.out.println(hs1);
}
}
输出:
[null, a, b, c, d]
[null, a, b, c, d]
我尝试了很多次,但顺序总是一样的.为什么?希望有人可以帮助我,提前谢谢!
解决方法:
这种行为的原因是HashSet由HashMap支持,而HashMap又由Entry对象数组支持.其中哈希用于查找数组的索引.所以HashSet中总是有一个元素的顺序(数组的顺序),你不能保证这个顺序是什么.
据我所知,代码中HashSet的顺序由其元素的计算哈希值的顺序决定(或至少受其影响).然后,使用相对简单的输入(如单个字符串),可以假设存在严格的哈希排序,这将为您提供看似自然的顺序.随着更复杂的对象,以及更复杂的哈希计算,哈希将更加传播,并且排序“更随机”.
此外,正如已经指出的那样,“不保证订购”并不意味着“保证随机排序”.
String类的hashcode方法也在这里发挥作用,对于单字符字符串,hashcode只是String中一个char的int值.由于char的int值按字母顺序排序,因此单个char字符串的计算哈希值也是如此.
内容总结
以上是互联网集市为您收集整理的java – 为什么HashSet命令总是与我的程序相同?全部内容,希望文章能够帮你解决java – 为什么HashSet命令总是与我的程序相同?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。