Hinweis Nr. 2 "Erstellen eines Suchverlaufs mit ArrayList und HashSet" [Java]

Einführung

Aufgenommen, weil ich es in der Einführung zu Paizas Fähigkeitsüberprüfung schwer hatte.

Was willst du tun

  1. Geben Sie mehrere Zeichenfolgen mit einer beliebigen Anzahl von Zeichen ein und fügen Sie sie in die Liste ein.
  2. Wenn zu diesem Zeitpunkt die eingegebene Zeichenfolge bereits in der Liste vorhanden ist, löschen Sie die vorherige Zeichenfolge und fügen Sie eine neue hinzu.
  3. Ausgabe von oben in der Reihenfolge der zuletzt eingegebenen.

Code 1

    Scanner sc = new Scanner(System.in);
    List<String> words = new ArrayList<>();
    while(sc.hasNext()) {
        String s = sc.nextLine();

if (words.contains (s)) {// Überprüfen Sie, ob es bereits in der Liste enthalten ist, und löschen Sie es, falls vorhanden words.remove(s); } words.add (0, s); // Füge die eingegebene Zeichenfolge am Anfang der Liste hinzu }

    for(String word : words) {
        System.out.println(word);
    }

Probleme mit Code 1

-Wenn Sie den Wert von ArrayList mit remove () oder add () erhöhen oder verringern, müssen alle gespeicherten Werte verschoben werden, sodass die Verarbeitung einige Zeit in Anspruch nimmt. -Seit enthält () von ArrayList durchsucht auch alle Werte in der Liste, je mehr die gespeicherten Werte, desto länger die Verarbeitungszeit.

Lösung

Code 2

Fügen Sie alle eingegebenen Zeichenfolgen zur Liste hinzu und verwenden Sie HashSet, um Duplikate auszublenden. (Ich lösche es nicht wirklich, ich nehme an, es war nicht da)

    Scanner sc = new Scanner(System.in);

    List<String> words = new ArrayList<>();
    while(sc.hasNext()) {
        String s = sc.nextLine();
        words.add(s);
    }

Collections.reverse (words); // Invertiert die Liste, um sie von der neu eingegebenen Liste auszugeben

Setzen Sie usedWords = new HashSet <> (); // HashSet, um doppelte Zeichenfolgen in der Liste zu ermitteln

    for(String word : words) {

if (! usedWords.contains (word)) {// Bestimmen Sie, ob es bereits zu usedWord hinzugefügt wurde (Duplikat), und zeigen Sie es an, wenn nicht System.out.println(word); } usedWords.add(word); }

Recommended Posts

Hinweis Nr. 2 "Erstellen eines Suchverlaufs mit ArrayList und HashSet" [Java]
Memorandum Nr. 4 "Holen Sie sich eine Zeichenkette und dekorieren Sie sie" [Java]
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
Die Geschichte der Erstellung einer Task-Management-Anwendung mit Swing, Java
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ②
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ①
Suchen und Ausführen einer Methode aus einer Instanz mit Verarbeitung (Java)
AtCoder ABC 136 D Suche nach Breitenpriorität Gelöst in Ruby, Perl und Java
Erstellen Sie mit JavaScript eine leistungsstarke Aufzählung mit Feldern und Methoden wie Java
Verwenden Sie Java mit MSYS und Cygwin
Verteilte Ablaufverfolgung mit OpenCensus und Java
Installieren Sie Java und Tomcat mit Ansible
PDF und TIFF mit Java 8 ausgeben
[Java] Unterschied zwischen Array und ArrayList
Mit Java verschlüsseln und mit C # entschlüsseln
Ein Memorandum mit NTP (Chrony) eingestellt
Finden Sie die Adressklasse und den Adresstyp aus der IP-Adresse mit Java [Abkochung Nr. 2]
Die Geschichte eines Game Launcher mit automatischer Ladefunktion [Java]
[Java] Erstellen Sie mit dem Befehl jar eine JAR-Datei, die sowohl komprimiert als auch nicht komprimiert ist
Ich habe eine Lambda-Funktion in Java geschrieben und mit SAM bereitgestellt
<java> Teilen Sie die Adresse vor und nach der Adresse mit einem regulären Ausdruck
So erstellen Sie eine App mit einem Plug-In-Mechanismus [C # und Java]