我为特殊用例创建了自己的自定义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;
}
答案 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知道您不再引用这些值。