JavaRush /Java-Blog /Random-DE /Sammlungen in Java | Java-Sammlungen

Sammlungen in Java | Java-Sammlungen

Veröffentlicht in der Gruppe Random-DE
Hallo! In den letzten Lektionen haben wir große Fortschritte bei der Beherrschung von ArrayList gemacht. Allerdings haben wir in dieser Zeit nur die einfachsten Vorgänge durchgeführt: Löschen, Einfügen, Ausgabe auf die Konsole. Natürlich ist dies nicht das Ende der Liste der Probleme, mit denen Entwickler bei der Verwendung von ArrayList konfrontiert sind . Erinnern Sie sich an die Vorlesung über Arrays und die Arrays- Klasse ? Es wurde von den Entwicklern von Java speziell entwickelt, um häufige Probleme zu lösen, auf die Programmierer bei der Arbeit mit Arrays stoßen. Was ist mit ArrayList ? Sicherlich gibt es auch für ihn eine Liste typischer Aufgaben. Wurden sie alle in einer separaten Klasse implementiert, oder müssen wir das gewünschte Verhalten jedes Mal manuell schreiben? Natürlich müssen Sie nicht alles selbst schreiben. Die häufigsten Vorgänge, die bei der Verwendung von Sammlungen in Java ausgeführt werden, wurden bereits in einer speziellen statischen Klasse „Collections“ implementiert. Klassensammlungen – 1

Sammlungen in Java

„Collections“ ist ein allgemeiner Name für mehrere Datenstrukturen in Java. Daten können auf viele verschiedene Arten gespeichert werden. Bisher haben wir nur die Klasse ArrayList untersucht , bei der Daten in einem Array gespeichert werden. Den Rest der Kollektionen werden wir später kennenlernen. Jetzt reicht es zu verstehen, dass die Collections-Klasse nicht nur für die Arbeit mit ArrayList, sondern auch für andere Arten von Sammlungen in Java konzipiert ist (daher auch der Name). Welche Aufgaben können Sie also mit der Collections-Klasse lösen, wenn Sie mit ArrayList arbeiten? Das erste und offensichtlichste ist das Sortieren. In der Vorlesung über Arrays haben wir uns ein Beispiel mit Zahlen angesehen, und jetzt schauen wir uns ein Beispiel mit Strings an. Um den Inhalt von Sammlungen zu sortieren, implementiert die Collections-Klasse die folgende Methode sort():
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Quecksilber");
       String venus = new String("Venus");
       String earth = new String("Erde");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptun");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       System.out.println(solarSystem);

   }
}
Abschluss:

[Венера, Земля, Марс, Меркурий, Нептун, Сатурн, Уран, Юпитер]
Die Zeilen sind alphabetisch sortiert! Warum in alphabetischer Reihenfolge? Die Klasse Stringist so programmiert, dass sie genau bestimmt, wie Zeichenfolgen miteinander verglichen werden (genau alphabetisch). Für Klassen, die Sie selbst erstellen, können Sie Ihren eigenen Vergleichsmechanismus implementieren, aber darüber werden wir in anderen Vorlesungen sprechen. Darüber hinaus können Sie mit der Collections-Klasse das minimale und maximale Element in einer . ermitteln ArrayList. Dies geschieht mit den Methoden min()und max():
public static void main(java.lang.String[] args) {

   ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
   System.out.println(Collections.max(numbers));
   System.out.println(Collections.min(numbers));

}
Abschluss:

7
1
Das ist natürlich viel praktischer, als manuell Code zu schreiben, um alle Elemente durchzugehen und nach dem größten/kleinsten Element zu suchen :) Eine weitere äußerst nützliche Methode ist reverse(). Wenn wir eine Liste „umkehren“ müssten, sodass die Elemente in umgekehrter Reihenfolge wären, wie würden wir das tun? Es wäre wahrscheinlich nicht so einfach, einen solchen Algorithmus selbst zu schreiben :) Glücklicherweise reverse()weiß die Methode bereits, wie das geht. Uns gefällt beispielsweise nicht, wie die Methode sort()unsere Planeten in alphabetischer Reihenfolge sortiert, und wir möchten die Reihenfolge in die umgekehrte Reihenfolge ändern – von Z nach A:
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Quecksilber");
       String venus = new String("Venus");
       String earth = new String("Erde");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptun");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       Collections.reverse(solarSystem);
       System.out.println(solarSystem);

   }
}
Abschluss:

[Юпитер, Уран, Сатурн, Нептун, Меркурий, Марс, Земля, Венера]
Hier reden wir übrigens oft über Sortierung, Reihenfolge der Elemente etc. Was wäre, wenn unsere Aufgabe genau das Gegenteil wäre? Wir versuchen zum Beispiel, einen Lotteriemechanismus zu implementieren. Wir haben der Walze 100 Zahlen hinzugefügt, die einzeln auf dem Bildschirm erscheinen sollten. Der erste Teilnehmer, der alle Zahlen auf seinem Spielschein durchgestrichen hat, gewinnt. Es ist sehr einfach, einen solchen Mechanismus mit der folgenden Methode zu implementieren shuffle():
public class Main {

   public static void main(java.lang.String[] args) {

       ArrayList<Integer> lottery = new ArrayList<>(100);
       for (int i = 1; i <= 100; i++) {

           lottery.add(i);//Zahlen von 1 bis 100 zur Trommel hinzufügen
       }

       Collections.shuffle(lottery);//mischen
       System.out.println(„Achtung! Die ersten 10 Zahlen erscheinen aus der Trommel!“);
       for (int i = 0; i < 10; i++) {

           System.out.println(lottery.get(i));
       }

   }
}
Abschluss:

Внимание! Из барабана появляются первые 10 чисел!
32
61
4
81
25
8
66
35
42
71
So einfach ist das! Das Problem ist gelöst und unser Teil des Spiels ist geschrieben :) Stellen wir uns nun eine andere Situation vor. Zuvor haben wir eine Liste solarSystemmit den darin aufgeführten Planeten erstellt. Und es scheint uns allen zu gefallen, wenn nicht eines: Man kann Elemente daraus entfernen und neue hinzufügen! Dies ist eindeutig nicht das Verhalten, das wir erwarten: Das Sonnensystem in unserem Programm sollte sich in einem unveränderten Zustand befinden. Die Collections-Klasse verfügt über eine sehr interessante Methode – unmodifiableList(). Es erstellt eine unveränderliche Version der angegebenen Liste. Es ist unmöglich, ein Element hinzuzufügen oder zu entfernen. Im Falle der Liste der Planeten des Sonnensystems ist das genau das, was wir brauchen!
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Quecksilber");
       String venus = new String("Venus");
       String earth = new String("Erde");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptun");

       List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune)));
       solarSystem.add("Pluto");//versuchen, ein neues Element hinzuzufügen
   }
}

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.Collections$UnmodifiableCollection.add(Collections.java:1075)
	at Main.main(Main.java:21)
Fehler: solarSystemJetzt können Sie nichts hinzufügen! Das Einzige, worauf Sie in diesem Fall achten müssen, ist, dass der Typ der Variablen sein muss List<>und nicht ArrayList<>(diese Methode gibt ein Objekt genau dieses Typs zurück, der allen Listentypen gemeinsam ist). Eine weitere häufige Situation, die während der Arbeit auftreten kann, ist, dass der Programmierer Elemente in der falschen Reihenfolge hinzugefügt hat. Wenn dies passiert ist und Merkur und Neptun unerwartet ihren Platz gewechselt haben, hilft uns die folgende Methode, diesen Fehler zu korrigieren swap():
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Quecksilber");
       String venus = new String("Venus");
       String earth = new String("Erde");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptun");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
       , jupiter, saturn, uranus, mercury));// falsche Planetenreihenfolge
       System.out.println(solarSystem);

       Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
       System.out.println(solarSystem);

   }
}
swap()Wir haben unsere Liste sowie die Indizes der beiden Elemente, die ausgetauscht werden müssen, an die Methode übergeben. Bitte beachten Sie: Die Methode funktioniert speziell mit Indizes und nicht mit Links. Deshalb brauchten wir hier eine Methode ArrayList.indexOf(). Abschluss:

[Нептун, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Меркурий]

[Меркурий, Венера, Земля, Марс, Юпитер, Сатурн, Уран, Нептун]
Machen wir uns zum Schluss noch mit einer sehr interessanten Methode vertraut – disjoint(). Es prüft, ob zwei Sammlungen Schnittmengen, also mindestens ein identisches Element, haben. Wenn nicht, wird zurückgegeben true, wenn ja, wird zurückgegeben false.
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Quecksilber");
       String venus = new String("Venus");
       String earth = new String("Erde");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptun");

       ArrayList<String> solarSystemPart1 = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars));
       ArrayList<String> solarSystemPart2 = new ArrayList<>(Arrays.asList(jupiter, saturn, uranus, neptune));

       System.out.println(Collections.disjoint(solarSystemPart1, solarSystemPart2));

   }
}
Wie Sie sehen, sind die Elemente in unseren beiden Listen völlig unterschiedlich, daher gibt das Programm aus true. Das ist eine so interessante und sehr nützliche Klasse. Er Arrayserledigt viele routinemäßige, untergeordnete Arbeiten für uns, sodass wir uns auf andere Dinge konzentrieren können. Lesen Sie darüber in der Oracle- Dokumentation , dort gibt es noch andere Methoden.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION