Pierwsza lista to [5,5,3,7,6] i nazywa się FirstList, inna lista to [5,5,5] i nazywa się SecList. Kiedy wywołuję metodę ContainsAll, taką jak ta FirstList.containsAll(SecList)
, aby sprawdzić, czy FirstList zawiera SecList. Oczywiście odpowiedź jest fałszywa, ale metoda ContainsAll zwraca true, to niepoprawny wynik.
Cały kod jest następujący:
List<Integer> FirstList = new ArrayList<>();
List<Integer> SecList = new ArrayList<>();
for (int j = 0; j < 3; j++)
{
SecList.add(5);
}
FirstList.add(5);
FirstList.add(5);
FirstList.add(3);
FirstList.add(7);
FirstList.add(6);
System.out.println("FirstList: " + FirstList);
System.out.println("SecList: " + SecList);
System.out.println("FirstList contains SecList? " + FirstList.containsAll(SecList));
A wyjście to:
FirstList: [5,5,3,7,6]
SecList: [5,5,5]
FirstList contains SecList? true
Wygląda na to, że ta metoda może dać poprawne wyniki tylko wtedy, gdy lista nie zawiera zduplikowanych elementów. Czy istnieje sposób na proste osiągnięcie tej logiki? Proszę wybacz mój słaby angielski i naprawdę doceniam twoją pomoc.
1 odpowiedź
„Oczywiście odpowiedź jest fałszywa”
Odpowiedź jest prawdziwa i powinna być prawdziwa. Dla każdego elementu e
w SecList
, FirstList.contains(e)
zwraca prawdę. Tak ma działać containsAll
; tutaj nie ma błędu.
Jeśli chcesz tego zachowania, będziesz musiał zliczyć elementy w każdej kolekcji, być może z Map<E, Integer>
lub Guava Multiset
, a następnie porównać zliczenia każdego elementu.
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].
.contains
i.containsAll
to metodyCollection
. Na początek nie wszystkie kolekcje obsługują duplikaty. A logika jest prosta: jeśli przeszukasz każdy element tej kolekcji, czy możesz znaleźć w tej kolekcji taki sam element? I to jest prawda w twoim przykładzie.second
ma tylko trzy elementy, to listafirst
zawiera wszystkie te same elementy, więc staje siętrue
. Możliwe, że należy sprawdzić, czy obie listy mają ten sam rozmiar, ale jest to szczegół implementacji