所以我知道 HashSet 没有像 SortedSet 这样的真正的排序功能,但是我偶然发现了这一点:
当我运行以下代码时:
public static void main(String[] args) {
Set<String> collection = new HashSet<String>(2000);
String[] data = {"a", "c", "g", "f", "b", "f", "b", "d","q","r","d","m"};
for(String input: data)
{
collection.add(input);
}
System.out.println("Output: " + collection);
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出: 输出:[a, b, c, d, f, g, m, q, r]
这是按字母顺序排序的。这是为什么?由于 HashSet 不是有序集。
所以我尝试使用一串字符而不是单个字符:
public static void main(String[] args) {
Set<String> collection = new HashSet<String>(2000);
String[] data = {"atjre", "crj", "gertj", "fertj", "berj"};
for(String input: data)
{
collection.add(input);
}
System.out.println("Output: " + collection);
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出: 输出:[crj, atjre, fertj, gertj, berj]
现在他们不再排序了,对此有什么解释吗?或者这只是一个随机巧合?
HashSet实现Set接口。这意味着无法保证元素的顺序。
此类实现 Set 接口,由哈希表(实际上是 HashMap 实例)支持。它不保证集合的迭代顺序;特别是,它不保证顺序随着时间的推移保持不变。来源
添加、删除几次后,随着时间的推移,您可以看到差异。
然而,“不保证排序”并不意味着“保证随机排序”。你的问题的确切答案是,
hashcode该类的 - 方法也在String这里发挥作用,对于单个字符Strings , 它将hashcode只是. 由于的 值是按字母顺序排列的,因此单个s 的计算结果也将按字母顺序排列。intcharStringcharinthashescharString
| 归档时间: |
|
| 查看次数: |
1465 次 |
| 最近记录: |