Java自定义HashMap - Clear方法

时间:2018-04-01 09:03:13

标签: java hashmap

我为特殊用例创建了自己的自定义HashMap,但我错过了" clear"方法。

我在互联网上只发现了一种针对HashMaps的清晰方法的实现,但我只是无法绕过它。

任何人都可以帮助我吗?我提供了自定义HashMap和我在互联网上找到的一个实现。

我的自定义HashMap:

public class LongToOSMNodeMap {
private Node[] table;
int MASK;

public LongToOSMNodeMap(int capacity) {
    table = new Node[1 << capacity]; // there are 2^{capacity} table cells
    MASK = table.length - 1;
}

public void put(long id, double lon, double lat) {
    int position = Long.hashCode(id) & MASK;
    table[position] = new Node(id, lon, lat, table[position]);
}

public Node get(long id) {
    int position = Long.hashCode(id) & MASK;
    for (Node n = table[position]; n != null; n = n.next) {
        if (n.id == id) {
            return n;
        }
    }
    return null;
}

public void clear() {

}

class Node extends OSMNode {
    long id;
    Node next;

    public Node(long id, double lon, double lat, Node n) {
        super(lon, lat);
        this.id = id;
        this.next = n;
    }

}

我没有得到的清除方法实现,但想要自己实现:

public void clear() {
     modCount++;
     Entry[] tab = table;
     for (int i = 0; i < tab.length; i++)
         tab[i] = null;
     size = 0;
 }

2 个答案:

答案 0 :(得分:0)

public void clear() {
    Arrays.fill(table, null);
    // Or: table = new Node[table.length];
}

public void put(long id, double lon, double lat) {
    int position = Long.hashCode(id) & MASK;
    for (Node n = table[position]; n != null; n = n.next) {
        if (n.id == id) {
            return;
        }
    }
    table[position] = new Node(id, lon, lat, table[position]);
}

答案 1 :(得分:0)

你应该编辑你的问题以包含这个引用 - 评论不会引起问题;) - 但我会尝试根据java.util.HashMap回答这个问题:

  

整体使用。我不明白我怎么用它来清除自己   HashMap中。此外,modCount和本地选项卡数组

modCount用作检测并发修改的方法,当您尝试迭代地图时使用该修改。您可以在HashMap的nextNode()方法中看到一个用例:

final Node<K,V> nextNode() {
  ...
  if (modCount != expectedModCount)
    throw new ConcurrentModificationException();
  ...
}

本地tab数组是出于性能原因;见this answer

将值设置为null只是为了帮助gc知道您不再引用这些值。