哈希表碰撞概念

时间:2013-12-06 21:02:04

标签: java hashtable collision

我正在尝试创建一个method来计算哈希表中发生的冲突次数。我会检查整个table以查看有多少buckets超过1 element

草案:

 public int getCollisions() {
 int counter = 0;
 for (int i = 0; i < buckets.length; i++) {
     if (buckets.length > 1) {
         counter += i;
     }
 }
 return counter;
 }

2 个答案:

答案 0 :(得分:2)

我可能会用这个 -

public long getCollisions() {
  long counter = 0;
  for (int i = 0; i < buckets.length; i++) {
    if (buckets[i].length > 1) {
      counter += buckets[i].length; // 2 (or more) items collided in this bucket.
    }
  }
  return counter;
}

答案 1 :(得分:1)

您正在添加存储桶的索引,而不是计数器的冲突数。试试这个:

public int getCollisions() {
    int counter = 0;
    for (int i = 0; i < buckets.length; i++) {
        if (buckets[i].length > 1) {
            counter += buckets[i].length-1;
        }
    }
    return counter;
 }

这里我假设如果存储桶中有n个对象(其中n> 1),则该存储桶中存在n-1个冲突。如果我在假设时不正确,那么只需删除-1,它应该可以正常工作。