【发布时间】:2018-11-20 20:49:13
【问题描述】:
所以我知道 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);
}
我得到以下输出: 输出:[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);
}
我得到以下输出:输出:[crj,atjre,fertj,gertj,berj]
现在它们不再排序,对此有何解释?或者这只是一个偶然的巧合?
【问题讨论】:
-
HashSet是基于hashcodes实现的。
-
也就是说,由于数据在 hashSet 中的存储方式(使用
equals()和hashCode()),这样,当比较'a'和'g'时,'a'总是更小等等,因此它被排序