最近我遇到了这个
String s = "9495963";
Set<Character> set = new HashSet<Character>();
for(char e : s.toCharArray()){
set.add(e);
}
System.out.println(set);//[3, 4, 5, 6, 9]
我得到的输出是[3、4、5、6、9],因此,如果HashSet不保留任何顺序,那么这些数字如何以升序排列?
答案 0 :(得分:7)
巧合。恰好是Character的hashCode是它的数字值。如果您继续添加的字符超过了HashSet中没有的哈希桶,则会发现它们混乱了。
答案 1 :(得分:2)
HashSet
在内部使用HashMap
。
HashMap
使用每个对象的hashCode()
方法将其元素存储在哈希表中。
对于Character类,哈希码是其对应的int值。
public static int hashCode(char value) {
return (int)value;
}
对于int
和double
数据类型,它们是auto-boxed到Integer
和Double
类中。当您创建HashSet
个int
时,它会使用Integer's hashCode()方法,该方法只会返回int
。因此,如果您添加int
,它们将按已排序的顺序存储。
但是对于double
来说,Double's hashCode()方法要复杂得多,因为在内存中表示双精度的方式。
但是,随着时间的流逝,当元素超出存储桶大小时,您将看到它不会保持顺序。