java - 哈希表:发生碰撞时

标签 java collections hashtable

   Hashtable ht = new Hashtable();
    for (int i = 0; i < 100; i++) {
        ht.put(i%10, i);
    }

    Enumeration< Integer> eles = ht.elements();
    while(eles.hasMoreElements())
        System.out.println(eles.nextElement());

上面的代码片段打印 99, 98,.......90

但我想打印所有 100 个元素。 如何获取数字列表,例如... 99,89,79,69,...19,9 98,88,78,68....18,8 97,87,77,67....17,7 .. .. 91,81,71,61....11,1

基本上都是碰撞列表。

最佳答案

您当前使用 i % 10 作为 HashMap 键,该键只有十个值 (0-9)。因此,只有最后十个值存储在您的 map 中,所有其他值都被覆盖。

如果您需要在每个存储桶中存储多个项目,请使用列表类型作为您的值。例如:

Hashtable<Integer, List<Integer>> ht = new Hashtable<>();
for (int i = 0; i < 100; i++) {
  int key = i % 10;
  List<Integer> list = ht.get(key);
  if (list == null) {
    list = new ArrayList<>();
    ht.put(key, list);
  }
  list.add(i);      
}

Enumeration<List<Integer>> eles = ht.elements();
while (eles.hasMoreElements()) {
  System.out.println(Arrays.toString(eles.nextElement().toArray()));
}

输出:

[9, 19, 29, 39, 49, 59, 69, 79, 89, 99]
[8, 18, 28, 38, 48, 58, 68, 78, 88, 98]
[7, 17, 27, 37, 47, 57, 67, 77, 87, 97]
[6, 16, 26, 36, 46, 56, 66, 76, 86, 96]
[5, 15, 25, 35, 45, 55, 65, 75, 85, 95]
[4, 14, 24, 34, 44, 54, 64, 74, 84, 94]
[3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
[2, 12, 22, 32, 42, 52, 62, 72, 82, 92]
[1, 11, 21, 31, 41, 51, 61, 71, 81, 91]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

关于java - 哈希表:发生碰撞时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25935536/

相关文章:

java - Collections.sort 不适用于 Java 1.7

scala - Option [T]来自Scala的什么地方?

java - 为哈希选择合适的表大小

java - 我需要实现一个数组哈希表,该表无需在开始时将数组初始化为 null 即可工作。任何线索如何做到这一点?

c++ - 在具有严格内存限制的 O(n^3) 中求解 5SUM

java - 适用于 Tomcat 6 及更高版本的良好管理控制台

java - 为什么在调用方法的时候,我已经捕获了异常,却说需要捕获异常?

java - 迭代列表的最佳方法是什么

java - Policy.setPolicy() 似乎无法正常工作

Java:是否可以自动将日志语句添加到方法中?