4 Möglichkeiten, Duplikate in der Java-Liste zu finden
Quelle: Codippa Dieser Artikel behandelt verschiedene Möglichkeiten, Duplikate in einer Liste zu finden. Wir nennen Duplikate Elemente, die mehr als einmal vorkommen.![Kaffeepause Nr. 209. 4 Möglichkeiten, Duplikate in der Java-Liste zu finden. So erstellen Sie einen einfachen Mediaplayer mit Java - 1](https://cdn.javarush.com/images/article/5a7a1857-8238-4956-8441-dadf4c6751c2/800.jpeg)
1. Verwenden von Set
Nachfolgend finden Sie einen Algorithmus zum Auffinden doppelter Elemente in einer Java- Liste mithilfe von Set .- Wir erstellen ein neues Java- Set- Objekt und eine neue ArrayList , um doppelte Elemente zu speichern.
- Wir führen eine Iteration oder Schleife durch die Liste durch.
- Wir fügen jedes Element in der Liste mit der Methode add() zum Set hinzu .
- Als Ergebnis gibt add() true zurück , wenn das Element hinzugefügt wurde, und false, wenn das Element bereits im Set vorhanden war .
- Wenn das Element bereits im Set vorhanden ist , handelt es sich um ein Duplikat. Dann fügen wir es zur ArrayList hinzu .
- Am Ende der Iteration enthält die neue ArrayList alle doppelten Elemente aus der ursprünglichen Liste ( List ).
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
Set<Integer> set = new HashSet<>();
List<Object> duplicates = new ArrayList<>();
numbers.forEach(n -> {
if (!set.add(n)) {
duplicates.add(n);
}
});
System.out.println("Duplicate elements: " + duplicates);
Abschluss:
Doppelte Elemente: [3, 1, 2]
Beachten Sie, dass wir zum Durchlaufen der List die Methode forEach() verwendet haben , Sie können aber auch jede andere Methode verwenden.
2. Karte verwenden
Nachfolgend sind die Algorithmusschritte für diese Methode zum Suchen von Duplikaten in einer Liste aufgeführt .- Erstellen Sie ein neues Map- Objekt und eine neue ArrayList , um doppelte Elemente aufzunehmen.
- Die Schlüssel dieser Map sind die Elemente der ursprünglichen List und ihre Werte sind die Anzahl ihrer Vorkommen in der List .
- Durchlaufen Sie die Liste ( List ).
- Überprüfen Sie für jedes Element in der Liste , ob es als Schlüssel in der Map vorhanden ist , indem Sie die Methode containsKey() verwenden .
- Wenn es existiert, erhöhen Sie seinen Wert in der Map und fügen Sie ihn erneut mit der Methode put() hinzu .
- Wenn es nicht vorhanden ist, fügen Sie es der Karte mit dem Wert 1 hinzu.
- Sobald die Listeniteration abgeschlossen ist, werden alle Map- Elemente mit einem Wert größer als 1 zu Duplikaten.
- Schließlich iterieren Sie die Map und fügen die Elemente, deren Wert größer als 1 ist, zu einer Liste hinzu, um doppelte Elemente zu speichern.
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
Map<Integer, Integer> countMap = new HashMap<>();
List<Object> duplicates = new ArrayList<>();
numbers.forEach(n -> {
if (countMap.containsKey(n)) {
countMap.put(n, countMap.get(n) + 1);
} else {
countMap.put(n, 1);
}
});
countMap.keySet().forEach(k -> {
if(countMap.get(k)> 1) {
duplicates.add(k);
}
});
3. Verwendung verschachtelter Schleifen
Wenn Sie aufgefordert werden, doppelte Elemente in einer Liste zu finden, ohne Collection- Klassen wie Set , Map usw. zu verwenden, ist diese Methode hilfreich. Algorithmusstufen:- Durchlaufen Sie die Liste ( List ).
- Nachdem die Schleife zum ersten Mal abgeschlossen wurde, kehren Sie zum Anfang zurück und wiederholen Sie die Schritte erneut, um jedes Element im Rest der Liste zu finden.
- Wenn das aktuelle Schleifenelement einem der übrigen Elemente entspricht, handelt es sich um ein Duplikat.
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
List<Object> duplicates = new ArrayList<>();
for (int i = 0; i < numbers.size() - 1; i++) {
for (int j = i + 1; j < numbers.size(); j++) {
if (numbers.get(i).equals(numbers.get(j))) {
duplicates.add(numbers.get(i));
}
}
}
4. Verwendung von Java Stream
Diese Methode basiert auf Java 8-Threads und funktioniert folgendermaßen:- Liste in Stream konvertieren .
- Konvertieren Sie den Stream mithilfe der Methode „collect()“ in eine Map . Beispielsweise ist „key“ jedes Element in der Liste und „value“ die Anzahl der Vorkommen.
- Die Methode „collect()“ gibt zurück und Map verwendet Collector als Argument. Die Collector- Implementierung bestimmt die Schlüssel und Werte der resultierenden Map .
- Da wir möchten, dass die Schlüssel der Map die Elemente einer Liste sind und ihre Werte die Anzahl ihrer Vorkommen darstellen, können wir Collectors.groupingBy() verwenden, um einen Collector zu erstellen .
- Sobald die Map mit groupingBy() erstellt wurde , verwenden Sie die Methode enterSet() , um einen Satz von Map.Entry- Objekten abzurufen .
- Filtern Sie Datensätze basierend auf einem Wert (d. h. der Anzahl der Vorkommen) größer als 1.
- Ordnen Sie die gefilterten Datensätze ihren Schlüsseln zu.
List<Integer> numbers = List.of(1, 2, 3, 4, 3, 1, 2);
Map<Object, Long> map = numbers.
stream().
collect(
Collectors.
groupingBy(n -> n, Collectors.counting())
);
List<Object> duplicates = map.
entrySet().
stream().
filter(e -> e.getValue() > 1).
map(e -> e.getKey()).
collect(Collectors.toList());
Die Methode groupingBy() wird verwendet, um Elemente in einer Sammlung basierend auf bestimmten Kriterien zu gruppieren. Hier ist ein Beispiel dafür, wie diese Methode funktioniert:
- Das Kriterium wird als Lambda-Ausdruck bereitgestellt, da groupingBy() ein Funktionsargument akzeptiert , bei dem es sich um eine Funktionsschnittstelle handelt.
- In diesem Fall gruppieren wir nach der Identitätsfunktion n -> n , was bedeutet, dass wir die Listenelemente nach ihren Werten gruppieren.
- Das zweite Argument für groupingBy() ist ein weiterer Kollektor, der angibt, wie die Elemente in jeder Gruppe kombiniert werden sollen.
- Hier verwenden wir Collectors.counting() , das eine Map erstellt , die die Anzahl jedes Elements in der Liste enthält.
So erstellen Sie einen einfachen Media Player mit Java
Quelle: Medium Dieses Tutorial hilft Ihnen, einen einfachen Mediaplayer in Java zu erstellen, um Audio- und Videodateien abzuspielen.![Kaffeepause Nr. 209. 4 Möglichkeiten, Duplikate in der Java-Liste zu finden. So erstellen Sie einen einfachen Mediaplayer mit Java - 2](https://cdn.javarush.com/images/article/357cd040-c8fc-4e3e-b08f-386a6fb34fc9/800.jpeg)
Schritt 1: Projekteinrichtung
Zuerst müssen wir unser Java-Projekt einrichten. Wir verwenden Eclipse als IDE, Sie können jedoch jede IDE Ihrer Wahl verwenden. Erstellen Sie ein neues Java-Projekt und nennen Sie es „MediaPlayer“. Wir müssen unserem Projekt auch die JavaFX-Bibliothek hinzufügen. Gehen Sie dazu zu den Projekteigenschaften und fügen Sie die JavaFX-Bibliothek zum Build-Pfad des Projekts hinzu.Schritt 2: Erstellen Sie die Benutzeroberfläche
Als nächstes erstellen wir die Benutzeroberfläche für unseren Mediaplayer. Es wird eine einfache Benutzeroberfläche mit einer Wiedergabetaste, einer Stopptaste und einem Mediaplayer-Panel sein, das die Video- oder Audiodatei anzeigt, die wir abspielen möchten. Für unsere Schnittstelle verwenden wir das BorderPane-Layout . Das Media Player-Feld befindet sich in der Mitte des BorderPane und die Wiedergabe- und Stoppschaltflächen befinden sich am unteren Rand des BorderPane. Hier ist der UI-Code:import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;
public class MediaPlayerApp extends Application {
private MediaPlayer mediaPlayer;
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Media Player");
Button playButton = new Button("Play");
playButton.setOnAction(e -> mediaPlayer.play());
Button stopButton = new Button("Stop");
stopButton.setOnAction(e -> mediaPlayer.stop());
BorderPane borderPane = new BorderPane();
Media media = new Media("http://www.example.com/sample.mp4");
mediaPlayer = new MediaPlayer(media);
MediaView mediaView = new MediaView(mediaPlayer);
borderPane.setCenter(mediaView);
borderPane.setBottom(stopButton);
borderPane.setRight(playButton);
Scene scene = new Scene(borderPane, 600, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
In diesem Code erstellen wir zwei Schaltflächen: playButton und stopButton . Wenn auf die Wiedergabeschaltfläche geklickt wird, rufen wir die Methode play() des mediaPlayer- Objekts auf . Wenn auf die Stopp-Schaltfläche geklickt wird, rufen wir die stop()- Methode des mediaPlayer- Objekts auf . Wir erstellen außerdem ein Media- Objekt mit der URL der Beispielvideodatei und ein mediaPlayer- Objekt mit einem Media- Objekt . Schließlich erstellen wir ein MediaView- Objekt mit einem MediaPlayer- Objekt und legen es als Mittelpunkt des BorderPane fest .
GO TO FULL VERSION