Erste Schritte mit Java Collection

[Hier](https://yk0807.com/techblog/2020/03/05/java%e3%81%ae%e3%82%b3%e3%83%ac%e3%82%af%e3%82% b7% e3% 83% a7% e3% 83% b3% e5% 85% a5% e9% 96% 80% ef% bc% 8b% ce% b1 /) Blog-Beitrag auf Qiita.

0. Vorwort

Nicht nur auf Java beschränkt, es gibt viele Fälle, in denen Arrays allein nicht gut zum Organisieren von Daten in der Programmierung geeignet sind. Daher wird die Datenstruktur wichtig und die Ausdrucksmethode variiert je nach Sprache.

Für C ++ gibt es Container für Vektor-, Listen- und Standardbibliotheken, und für C # scheint etwas namens LINQ verwendet zu werden. Mit PHP können Sie viel mit Arrays anfangen (Sie müssen vorsichtig sein, wenn Sie es verwenden). Mit Python fühlt es sich an, als würden Sie Listentypen, Taples, Wörterbücher usw. je nach Zweck verwenden.

1. Was ist ein Sammlungsrahmen?

Nun, Java. Java verwendet ein Sammlungsframework. Im Sammlungsframework werden Listen (Werte sind geordnet), Mengen (Werte sind nicht unbedingt geordnet, aber nur ein Wert ist gleich), Map (Werte entsprechen jedem Schlüssel). Wir haben einen vollständigen Satz von Datenstrukturen, die zum Ausdrücken von Daten erforderlich sind, z. B. (es gibt auch eine Deque, die nur Werte von beiden Seiten eingeben und ausgeben kann, diesmal jedoch weggelassen wird, da ihre Verwendung begrenzt ist).

2. Liste

Zunächst eine Liste. Die Liste enthält ** Daten für jeden Index ab ** 0. Es wird basierend auf der List-Schnittstelle implementiert, und zwei Klassen, ArrayList (Array mit variabler Länge) und LinkedList (gebundene Liste), werden häufig verwendet. ArrayList ist wie ein Vektor in C ++. Java hat auch eine Vector-Klasse, die jedoch in Java 8 und höher veraltet ist. Jedes ist wie folgt definiert.

List<Integer> arrayList = new ArrayList<>();
List<Integer> linkedList = new LinkedList<>();

Welche Klasse Sie definieren, wird beim Aufrufen des Konstruktors festgelegt. Übrigens wird das <> zwischen der Klasse und der Klammer als Diamantoperator bezeichnet, eine Notation zum Weglassen des Elementtyps. Häufig verwendete Operationen sind wie folgt. Obwohl dies für ArrayList beschrieben ist, ist die auszuführende Verarbeitung auch für LinkedList dieselbe.

List<String> arrayList = new ArrayList<>();
List<String> linkedList = new LinkedList<>();
arrayList.add("Apple");  //Element am Ende der Liste"Apple"Hinzufügen
arrayList.get(5);  //5 in der Liste+Holen Sie sich das erste Element
arrayList.set(3, "Orange");  //Liste 3+Der Wert des ersten Elements"Orange"Einstellen
arrayList.remove(4); //4 in der Liste+Entfernen Sie das erste Element und dekrementieren Sie nachfolgende Indizes um eins
arrayList.size();  //Gibt die Anzahl der Elemente in der Liste zurück
arrayList.clear();  //Leere die Liste
//Geben Sie die Elementliste von arrayList aus
for (String data : arrayList) {
	System.out.println(data);
}

Obwohl ich oben geschrieben habe, dass "die auszuführende Verarbeitung dieselbe ist", haben ArrayList und LinkedList unterschiedliche Implementierungsmethoden, sodass sie möglicherweise ihre eigenen Stärken und Schwächen haben. Zum Abrufen und Festlegen ist ArrayList, in dem jedes Element im Speicher indiziert ist, schneller, und zum Hinzufügen und Entfernen verknüpfen Sie Informationen zwischen Elementen (bildähnlicher Zeiger in C-Sprache. Java hat keinen Zeiger). LinkedList verbunden durch) ist schneller. Daher ist ArrayList geeignet, wenn Sie große Datenmengen aus einer Datenbank abrufen. Der Hauptzweck besteht darin, auf die darin enthaltenen Elemente zuzugreifen. LinkedList ist geeignet, wenn Daten häufig zur Liste hinzugefügt oder daraus gelöscht werden.

3. Stellen Sie ein

Ein Satz ist eine Sammlung von Daten wie eine Liste, aber im Gegensatz zu einer Liste gibt es keinen ** Index, und Sie können nicht mehr als einen mit demselben Wert ** haben. Ich hoffe, dass sich diejenigen, die an der Universität Mathematik studiert haben, eine Menge / Phasenmenge vorstellen können. Dies wird basierend auf der Set-Schnittstelle implementiert, und häufig werden HashSet, TreeSet und LinkedHashSet verwendet. Jedes ist wie folgt definiert.

Set<String> hashSet = new HashSet<>();
Set<String> treeList = new TreeList<>();
Set<String> linkedHashSet = new LinkedHashSet<>();

Die Grundoperation ist wie folgt. Ich schreibe für HashSet, aber die anderen beiden sind gleich. Bitte beachten Sie, dass ** get und set fehlen **.

Set<String> hashSet = new HashSet<>();
Set<String> treeSet = new TreeSet<>();
Set<String> linkedHashSet = new LinkedHashSet<>();
hashSet.add("Banana");  //Zu den Elementen des Sets"Banana"Wenn nicht enthalten, hinzufügen
hashSet.remove("Lemon"); //Zum Set"Lemon"Wenn es enthalten ist, löschen Sie es
hashSet.size();  //Gibt die Anzahl der Elemente in der Menge zurück
//Geben Sie eine Liste der hashSet-Elemente aus
for (String data : hashSet) {
	System.out.println(data);
}

Der Unterschied zwischen HashSet, TreeSet und LinkedHashSet besteht darin, dass HashSet schneller ist, die Reihenfolge jedoch überhaupt nicht garantiert wird, TreeSet die Elemente sortiert und LinkedHashSet die Reihenfolge beibehält, in der die Elemente hinzugefügt werden.

treeSet.add("Banana");
treeSet.add("Orange");
treeSet.add("Apple");
for (String data : treeSet) {
	System.out.println(data);
}

Dann wird es in der Reihenfolge "Apple" -> "Banana" -> "Orange" ausgegeben.

linkedHashSet.add("Banana"); 
linkedHashSet.add("Orange");
linkedHashSet.add("Apple"); 
for (String data : linkedHashSet) {
	System.out.println(data);
}

Dann wird es in der Reihenfolge "Banane" -> "Orange" -> "Apfel" ausgegeben.

4. Karte

Karten enthalten nicht nur Werte, sondern auch ** Daten in Kombination mit Schlüsseln, die Werte angeben **. Schlüssel sind auf der Karte eindeutig (es gibt nicht mehrere identische Werte), aber mehrere Werte können gleich sein. Karten werden basierend auf der Kartenschnittstelle implementiert, und häufig werden HashMap, TreMap und LinkedHashMap verwendet. Jedes ist wie folgt definiert.

Map<String, Integer> hashMap = new HashMap<>();
Map<String, Integer> treeMap = new TreeMap<>();
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();

Die Grundoperation ist wie folgt. Verwenden Sie die put-Methode, um der Karte eine Schlüssel / Wert-Kombination hinzuzufügen.

Map<String, Integer> hashMap = new HashMap<>();
Map<String, Integer> treeMap = new TreeMap<>();
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
hashMap.put("Tomato", 300);  //Karten Schlüssel"Tomato"Stellen Sie den Wert auf 300 ein
hashMap.get("Tomato");  //Der Schlüssel der Karte ist"Tomato"Gibt den Wert von zurück (sonst null)
hashMap.remove("Lemon"); //Der Schlüssel befindet sich auf der Karte"Lemon"Löschen, wenn es enthält
hashMap.size();  //Gibt die Anzahl der Elemente in der Karte zurück
//Schlüssel für jedes Element der Karte:Ausgabe in Form eines Wertes
for (Map.Entry<String, Integer> data : hashSet.entrySet()) {
	System.out.println(data.getKey() + ":" + data.getValue());
}

Die Ausgabe aller Daten dauert etwas länger als bei anderen. Wie das Set ist HashMap schnell, aber die Reihenfolge ist nicht garantiert, TreeMap enthält die Daten in der Reihenfolge der Schlüssel und LinkedHashMap enthält die Daten in der Reihenfolge, in der die Daten hinzugefügt wurden.

5. Am Ende

Ich habe mir die Sammlungen angesehen, die ich normalerweise in Java verwende. Es scheint mehrere andere zu geben, aber wenn Sie die diesmal eingeführten entsprechend dem Zweck beherrschen, wird es meiner Meinung nach keine großen Probleme beim Umgang mit Daten in Java geben. Früher habe ich Daten für eine Kombination aus einem Namen und einem Objekt in HashMap definiert, aber mir wurde klar, dass es notwendig war, unterwegs in aufsteigender Reihenfolge des Namens auszugeben, also habe ich sie schnell in TreeMap neu geschrieben. Überlegen Sie sich bei der Verwendung einer Sammlung, was Sie anstreben, und wählen Sie diejenige aus, die für Sie am besten geeignet ist.

Recommended Posts

Erste Schritte mit Java Collection
Erste Schritte mit Java Basics
Erste Schritte mit Ruby für Java-Ingenieure
Erste Schritte mit DBUnit
Erste Schritte mit Ruby
Einführung in Java ab 0 Teil 1
Erste Schritte mit Swift
Erste Schritte mit Doma-Transaktionen
Links & Memos für den Einstieg in Java (für mich)
Erste Schritte mit Java 1 Ähnliche Dinge zusammenstellen
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Erste Schritte mit der Verarbeitung von Doma-Annotationen
Erste Schritte mit JSP & Servlet
Erste Schritte mit Spring Boot
Erste Schritte mit Ruby-Modulen
Erste Schritte mit Java-Programmen mit Visual Studio Code
Java9-Sammlung
Erste Schritte mit älteren Java-Ingenieuren (Stream + Lambda)
Erste Schritte mit Java_Kapitel 5_Praktische Übungen 5_4
[Google Cloud] Erste Schritte mit Docker
Erste Schritte mit Docker mit VS-Code
Erste Schritte mit Java und Erstellen eines Ascii Doc-Editors mit JavaFX
Erste Schritte mit dem Doma-Criteria API Cheet Sheet
Zurück zum Anfang, Erste Schritte mit Java ② Steueranweisungen, Schleifenanweisungen
Erste Schritte mit Docker für Mac (Installation)
Einführung in den Parametrisierungstest in JUnit
Java Reintroduction-Java Collection
Erste Schritte mit Ratpack (4) -Routing & Static Content
Beginnen Sie mit der Funktionsweise von JVM GC
Erste Schritte mit dem Language Server Protocol mit LSP4J
[Java] Sammlungsframework
Erste Schritte mit dem Erstellen von Ressourcenpaketen mit ListResoueceBundle
Erste Schritte mit maschinellem Lernen mit Spark "Preisschätzung" # 1 Laden von Datensätzen mit Apache Spark (Java)
Erste Schritte mit Java_Kapitel 8_Über "Instanzen" und "Klassen"
Erste Schritte mit der Doma-Projektion mit der Criteira-API
[Java] Erstellen Sie eine Sammlung mit nur einem Element
Erste Schritte mit Doma-Using Joins mit der Criteira-API
Erste Schritte mit Doma-Einführung in die Kriterien-API
Ich habe versucht, mit Gradle auf Heroku zu beginnen
Installieren Sie Java mit Homebrew
Abgelaufene Java-Sammlung
Fragen zum Java-Sammlungsinterview
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
Bequemer Download mit JAVA
Schalten Sie Java mit direnv
Java-Download mit Ansible
Lass uns mit Java kratzen! !!
Erstellen Sie Java mit Wercker
Beginnen Sie mit Gradle
Endian-Konvertierung mit JAVA
Erfahrene Java-Benutzer beginnen mit der Entwicklung von Android-Apps
Beginnen Sie mit serverlosem Java mit dem leichtgewichtigen Framework Micronaut!
Zurück zum Anfang und erste Schritte mit Java ① Datentypen und Zugriffsmodifikatoren
(Java) Einfache BDD mit Spektrum?
Verwenden Sie Lambda-Ebenen mit Java