Chcę zapisać wartość na podstawie klucza, złożonego z zestawu elementów. Coś jak na poniższym przykładzie. Oczywiście wiem, że mój pseudo-przykład nie zadziałałby, ponieważ hash obiektu będzie prawdopodobnie jego adresem, który będzie unikalny dla każdej nowej instancji, niezależnie od jej zawartości.Jak używać zestawu elementów jako klucza w mapach Java?
// in this pseudo-example this is my SET http://algs4.cs.princeton.edu/35applications/SET.java.html
// but the idea is that values are unique
HashMap<SET<Integer>, String> map = new HashMap<>();
SET a = new SET();
a.add(1);
a.add(2);
a.add(5);
SET b = new SET();
b.add(5);
b.add(1);
b.add(2);
map.put(a, "w00t");
System.out.println(map.get(b)); // I would want to get "w00t" because my key is the same set of elements
Oczywiście mogę tylko rodzaj i złączyć wartości ustawione jako ciąg znaków, z separatorem i użyć jej w HashMap<String, String>
konstrukcji, ale że po prostu nie czuję się dobrze. Jestem całkiem nowym programistą Java, więc może istnieć oczywiste rozwiązanie, którego mi brakuje.
Musisz zajrzeć do 'keySet()'. Również jest "Set", a nie "SET" –
Myślę, że jest tutaj duży problem, jeśli chcesz użyć kolekcji do tego zadania. Wszystkie są zmienne. Co się stanie, jeśli dodasz zestawy (2,3) i (1,2,3), ale wtedy zdecydujesz się usunąć {1} z drugiego zestawu? Lepiej stwórz do tego oddzielny niezmienny obiekt, w przeciwnym razie będzie to niepokojące. – pnadczuk
Zdaję sobie z tego sprawę, ale w moim przypadku nie będę modyfikował obiektów po ich zapisaniu. Idealnie chciałbym mieć niezmienny obiekt, który inicjuję z innych iterowalnych, ale nie ma takiego, który mógłbym znaleźć :( – ddinchev