Java哈希集中元素的集合排序
为什么第二组和第三组保持顺序:
Integer[] j = new Integer[]{3,4,5,6,7,8,9};
LinkedHashSet<Integer> i = new LinkedHashSet<Integer>();
Collections.addAll(i,j);
System.out.println(i);
HashSet<Integer> hi = new HashSet<Integer>(i);
System.out.println(hi);
LinkedHashSet<Integer> o = new LinkedHashSet<Integer>(hi);
System.out.println(o);
以下是我得到的输出:
3,4,5,6,7,8,9
3,4,5,6,7,8,9
3,4,5,6,7,8,9
# 1 楼答案
第二个(仅使用
HashSet
)只是巧合。从JavaDocs开始:第三个(
LinkedHashSet
)是designed是这样的:# 2 楼答案
@Behrang的答案是好的,但更具体地说,
HashSet
似乎与LinkedHashSet
顺序相同的唯一原因是integer.hashCode()
恰好是整数值本身,所以在HashSet
内部存储器中,数字恰好是顺序的。这是高度特定于实现的,正如@Behrang所说,这真是巧合例如,如果使用
new HashSet<>(4)
将桶的初始数量设置为4(而不是16),则可能会得到以下输出:如果你坚持价值观>;=16.你可能会得到这样的结果: