10

我必须为此存储一个关闭列表我定义了一个地图 -

Map<Node, Boolean> closeList = new HashMap<Node, Boolean>()

现在检查我使用的这张地图中是否存在节点 -

boolean binExists = closeList .containsKey(node)

似乎value-boolean地图的 是不必要的。

您对使用 HashMap 模式 (O(1)) 进行此检查有什么更好的想法吗?

4

2 回答 2

18

HashSet似乎正是您所需要的。

Set<Node> closeSet = new HashSet<>();
Node n1 = new Node();
Node n2 = new Node();
closeSet.add(n1);
System.out.println(closeSet.contains(n1)); //true
System.out.println(closeSet.contains(n2)); //false - though depending upon equals/hashcode implementation of Node

尽管使用 aSet<Node>看起来比使用 a 更好Map<Node, Boolean>,但在其实现内部java.util.HashSet使用 a HashMap。如果您需要一个使用更少内存的实现,例如,您可以看看这个实现

于 2012-11-25T07:33:37.937 回答
0

使用ArrayList,您可以在 O(1) 中获得以下内容:

  • 尺寸
  • 是空的
  • 得到
  • 迭代器
  • 列表迭代器

使用HashSet,您可以在 O(1) 中获得以下内容:

  • 添加
  • 消除
  • 包含
  • 尺寸
于 2012-11-25T08:01:30.523 回答