[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.
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.
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).
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.
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.
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.
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