2012-11-25 35 views
6

我必须存储关闭页面为了这个,我定义的地图 -地图与主要只 - 为包含检查

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

现在用于检查节点是否在这个地图我使用存在 -

boolean binExists = closeList .containsKey(node)

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

对于使用HashMap模式(O(1))进行检查,你有什么更好的主意吗?

回答

12

A 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 

即使使用Set<Node>看起来比使用Map<Node, Boolean>更好,java.util.HashSet在其内部使用HashMap的实现。如果你需要一个使用较少内存的实现,你可以看看this implementation

0

随着ArrayList你可以在O以下(1):

  • 大小
  • 的isEmpty
  • 得到
  • 设置
  • 迭代
  • 的ListIterator

有了HashSet你可以在O以下(1):

  • 添加
  • 删除
  • 包含
  • 大小