Metoda ArrayList removeAll() w Javie nie usuwa wszystkich elementów z właściwej ArrayList , jak może sugerować jej nazwa. Jeśli potrzebujesz tej operacji, użyj metody Clear() ArrayList . W przeciwieństwie do metody clear() metoda removeAll() usuwa wszystkie elementy z danej listy, które znajdują się w innej kolekcji.
Składnia i deklaracja removeAll().
Oto składnia metody:
boolean removeAll(Collection<?> c)
Gdzie c to kolekcja zawierająca elementy, które mają zostać usunięte z tej listy. Ta metoda zwraca wartość true, jeśli ta lista uległa zmianie w wyniku wywołania. Może również zgłaszać wyjątki: ClassCastException — jeśli klasa elementu tej listy jest niekompatybilna z określoną kolekcją NullPointerException — jeśli lista zawiera element pusty, a określona kolekcja nie dopuszcza elementów pustych lub jeśli określona kolekcja jest pusta
Przykład kodu removeAll().
Załóżmy, że masz listę znajomych w sieci społecznościowej. Cóż, na razie to codzienność. Załóżmy też, że jesteś skrupulatny i wpisz wszystkich swoich przeciwników na specjalną listę wrogów, niezależnie od tego, czy wrogowie są wśród znajomych z sieci społecznościowej, czy nie. Zdecydowałeś się wyczyścić listę znajomych ze wszystkich nieżyczliwych osób. Metoda removeAll() na pewno w tym pomoże:
import java.util.ArrayList;
import java.util.List;
public class RemoveAll2Example {
public static void main(String[] args) {
List<String> friendList = new ArrayList<String>();
// use add() method to add friends into your friend list
friendList.add("Alex");
friendList.add("Ivy");
friendList.add("Victor");
friendList.add("Peter");
friendList.add("Lenny");
friendList.add("Olly");
friendList.add("Stu");
friendList.add("Scott");
friendList.add("Olivia");
System.out.println("My old friend list: "+ friendList);
//create and add elements to foe list
List<String> foeList = new ArrayList<String>();
foeList.add("Ben");
foeList.add("Scott");
foeList.add("Chuck");
foeList.add("Olly");
foeList.add("Sam");
System.out.println("All my enemies: "+ foeList);
//remove all foeList elements from friendList list if they exist
friendList.removeAll(foeList);
System.out.println("new friend List without foes: "+ friendList);
}
}
Dane wyjściowe to:
Moja stara lista przyjaciół: [Alex, Ivy, Victor, Peter, Lenny, Olly, Stu, Scott, Olivia]
Wszyscy moi wrogowie: [Ben, Scott, Chuck, Olly, Sam]
Lista nowych przyjaciół bez wrogów: [Alex, Ivy, Victor, Peter, Lenny, Stu, Olivia]
Jak widać, metoda usunęła twoich wrogów Olly'ego i Scotta. Nie miałeś wrogów Bena, Chucka i Sama na swojej liście znajomych. Zapewne zauważyłeś, że zgodnie z deklaracją metody removeAll() możesz usunąć ze swojej listy nie tylko wartości z innej listy, ale także z losowej kolekcji. Weźmy przykład z HashMap . W takim przypadku musisz wyraźnie wskazać, że chcesz usunąć te rekordy, które pasują na przykład do wartości (removeAll (collection.values()) lub kluczy (removeAll (collection.keySet()) . Wyobraźmy sobie, że mamy HashMap z imionami wszystkich dziewczyn spośród naszych przyjaciół, a na liście znajomych musimy zostawić tylko chłopców(Nie wiem, dlaczego może to być potrzebne, ale nigdy nie wiadomo). Wróćmy do naszego przykładu ze starą listą znajomych, utwórzmy dziewczyny HasMap i usuńmy z listy znajomych wszystkie dziewczyny, których imiona są zapisane w wartościach naszej HashMap .
import java.util.*;
public class RemoveAll2Example {
public static void main(String[] args) {
// create an empty array list and full it up using Java 9 Factory Methods in one line
List<String> friendList= new ArrayList<>(List.of("Alex", "Ivy", "Victor", "Peter", "Lenny", "Olly", "Stu", "Scott", "Olivia"));
System.out.println("My old friend list: "+ friendList);
// Creating hashMap with girls keys and names also using using Java 9 Factory Methods
Map<Integer, String> girls = new HashMap<>(Map.of(1, "Olly", 2, "Olivia", 3, "Loe", 4, "Ivy"));
friendList.removeAll(girls.values());
System.out.println("boys only friendList: " + friendList);
}
}
Oto dane wyjściowe:
Moja stara lista znajomych: [Alex, Ivy, Victor, Peter, Lenny, Olly, Stu, Scott, Olivia]
Lista przyjaciół tylko dla chłopców: [Alex, Victor, Peter, Lenny, Stu, Scott]
Niektóre szczególne przypadki
Na początku tego artykułu napisałem, że aby usunąć wszystkie jego wartości z listy, należy użyć metody ArrayList clear() . Jest, ale oczywiście możesz również użyć do tego celu metody removeAll() . Pewnie już się domyśliłeś, jak to zrobić:
myList.RemoveAll (myList);
Podajmy przykład. W przypływie socjopatii opróżnijmy całą naszą listę znajomych:
import java.util.*;
public class RemoveAll2Example {
public static void main(String[] args) {
// create an empty array list and full it up using Java 9 Factory Methods in one line
List<String> friendList= new ArrayList<>(List.of("Alex", "Ivy", "Victor", "Peter", "Lenny", "Olly", "Stu", "Scott", "Olivia"));
System.out.println("My old friend list: "+ friendList);
friendList.removeAll(friendList);
System.out.println("my new empty friendlist...:" + friendList);
}
}
Oto dane wyjściowe:
lista przyjaciół tylko dla chłopców: [Alex, Victor, Peter, Lenny, Stu, Scott]
moja nowa pusta lista przyjaciół...:[]
Przynajmniej spróbujmy usunąć elementy zerowej kolekcji z naszej ArrayList :
import java.util.*;
public class RemoveAll2Example {
public static void main(String[] args) {
List<String> friendList = new ArrayList<>(List.of("Alex", "Ivy", "Victor", "Peter", "Lenny", "Olly", "Stu", "Scott", "Olivia"));
System.out.println("My old friend list: "+ friendList);
// we are happy not to have foes
List<String> foeList = null;
//trying to remove all foeList elements from friendList list
friendList.removeAll(foeList);
System.out.println("my new friendlist:" + friendList);
}
}
Zgodnie z definicją metody removeAll() mamy wyjątek na wyjściu:
Moja stara lista znajomych: [Alex, Ivy, Victor, Peter, Lenny, Olly, Stu, Scott, Olivia]
Wyjątek w wątku „main” java.lang.NullPointerException
Więcej czytania: |
---|
GO TO FULL VERSION