2012-11-25 12 views
6

devo memorizzare un Ridurre la lista per questo ho definito una mappa -Mappa con chiave unica - per i contiene il controllo

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

ora verificare se un nodo è esiste in questa mappa che uso -

boolean binExists = closeList .containsKey(node)

sembra che la value-boolean della mappa è inutile.

Hai qualche idea migliore per questo controllo utilizzando la modalità HashMap (O (1))?

risposta

12

A HashSet sembra essere esattamente quello che ti serve.

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 

Anche se si utilizza un Set<Node> sembra migliore rispetto all'utilizzo di un Map<Node, Boolean>, java.util.HashSet utilizza un HashMap internamente nella sua attuazione. Se hai bisogno di un'implementazione che usi meno memoria, potresti dare un'occhiata a this implementation.

0

Con ArrayList è possibile ottenere quanto segue in O (1):

  • dimensioni
  • isEmpty
  • ottenere
  • set
  • iteratore
  • listIterator

Con HashSet si può ottenere quanto segue in O (1):

  • aggiungere
  • rimuovere
  • contiene
  • dimensioni
Problemi correlati