为什么按照hashcode排序monday到friday时firday的位置不对
时间: 2024-09-16 07:04:17 浏览: 25
定义hashcode时使用31系数的原因
当你尝试按照字符串"Monday"、"Tuesday"、"Wednesday"、"Thursday"、"Friday"的哈希码排序时,结果可能会出乎意料,这是因为哈希码计算是依据字符的ASCII值,而这些英文单词虽然字母排列顺序一样,但由于每个字母的ASCII值不同,它们的哈希码很可能不一致。
例如,'M' 的 ASCII 值(77)比 'F' (70)大,所以 "Monday" 和 "Friday" 直接通过哈希码计算出来的顺序很可能会反向。此外,哈希函数的设计通常不是针对字典顺序的,而是为了尽可能均匀地分布元素,以提高查找效率。
因此,直接使用 `hashCode()` 进行排序可能会导致 "Monday" 排在 "Friday" 之前。为了得到预期的排序,你需要使用自然排序,或者创建一个自定义的比较器,该比较器根据字符串的实际内容进行比较,如按照单词的全名进行比较:
```java
List<String> daysOfWeek = Arrays.asList("Monday", "Tuesday", "Wednesday", "Thursday", "Friday");
daysOfWeek.sort(Comparator.naturalOrder()); // 自然排序
```
这样,"Monday" 就会在 "Friday" 之前了。
阅读全文