2012-11-25 12 views
6

muszę przechowywać Zamknij listę za to ja zdefiniowana mapa -Mapa z kluczem tylko - dla zawiera sprawdzanie

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

teraz do sprawdzania, czy dany węzeł jest istnieć w tej mapie używam -

boolean binExists = closeList .containsKey(node)

wydaje się, że value-boolean mapy jest niepotrzebna.

Masz lepszy pomysł na to sprawdzenie przy użyciu trybu HashMap (O (1))?

Odpowiedz

12

A HashSet wydaje się być dokładnie tym, czego potrzebujesz.

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 

Nawet używając Set<Node> wygląda lepiej niż przy użyciu Map<Node, Boolean>, java.util.HashSet stosuje HashMap wewnętrznie w to realizacja. Jeśli potrzebujesz implementacji, która zużywa mniej pamięci, możesz na przykład rzucić okiem na this implementation.

0

Z ArrayList można uzyskać następujące w czasie O (1):

  • rozmiar
  • isEmpty
  • dostać
  • ustawić
  • iterator
  • listIterator

Z HashSet można uzyskać następujące w czasie O (1):

  • dodać
  • usunąć
  • zawiera
  • rozmiar
Powiązane problemy