CodeGym /Java-Blog /Random-DE /Collections-Klasse in Java
Autor
Jesse Haniel
Lead Software Architect at Tribunal de Justiça da Paraíba

Collections-Klasse in Java

Veröffentlicht in der Gruppe Random-DE
Hallo! In den letzten Lektionen haben wir große Fortschritte bei der Beherrschung von gemacht ArrayList. Bisher haben wir jedoch nur die einfachsten Vorgänge ausgeführt: Entfernen, Einfügen und Anzeigen. Dies deckt natürlich nicht die vollständige Liste der Aufgaben ab, die Entwickler bei der Arbeit mit ausführen müssen ArrayList. Erinnern Sie sich an die Lektion über Arrays und die ArraysKlasse? Die Entwickler von Java haben diese Klasse speziell für die Bewältigung der häufigsten Aufgaben entwickelt, mit denen Programmierer bei der Arbeit mit Arrays konfrontiert sind. Und was ist mitArrayList? Sicherlich gibt es eine Liste allgemeiner Aufgaben, die damit ausgeführt werden müssen. Wurden sie alle in einer bestimmten Klasse implementiert oder müssen wir jedes Mal unsere eigene Implementierung schreiben? Natürlich müssen Sie nicht alles selbst schreiben. Die häufigsten Operationen mit Sammlungen wurden bereits in der speziellen statischen CollectionsKlasse implementiert. Inkassoklasse - 1 In Java wird eine Gruppe von Datenstrukturen üblicherweise als Sammlung bezeichnet . Daten können auf viele verschiedene Arten gespeichert werden. Bisher haben wir nur die ArrayListKlasse untersucht, bei der Daten in einem Array gespeichert werden. Weitere Kollektionen werden wir später kennenlernen. Im Moment reicht es aus, nur zu verstehen, dass die CollectionsKlasse nicht nur für die Arbeit mit anderen gedacht istArrayList, aber auch mit anderen Arten von Sammlungen (daher der Name). Bei welchen Aufgaben Collectionshilft die Klasse eigentlich bei der Arbeit ArrayList? Das erste und offensichtlichste ist das Sortieren. In der Lektion über Arrays haben wir ein Beispiel mit Zahlen betrachtet. Jetzt betrachten wir ein Beispiel mit Strings. Die CollectionsKlasse implementiert die sort()Methode zum Sortieren des Inhalts von Sammlungen:

public class Main {

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

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

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

   }
}
Ausgabe: [Erde, Jupiter, Mars, Merkur, Neptun, Saturn, Uranus, Venus] Die Zeichenfolgen sind alphabetisch sortiert! Aber warum alphabetisch? Die StringKlasse implementiert tatsächlich die Logik, die regelt, wie die Zeichenfolgen verglichen werden (und zwar alphabetisch). Für Klassen, die Sie selbst erstellen, können Sie Ihre eigene Vergleichslogik implementieren, aber wir werden in anderen Lektionen darüber sprechen. Die CollectionsKlasse hilft Ihnen auch dabei, das minimale und maximale Element in einer zu finden 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));

}
Ausgabe: 7 1 Das ist natürlich weitaus praktischer, als den Code manuell zu schreiben, um alle Elemente zu durchlaufen und das größte/kleinste Element zu finden :) Eine weitere sehr nützliche Methode ist reverse(). Wenn wir die Liste „umdrehen“ müssten, sodass die Elemente in die umgekehrte Reihenfolge kommen, wie würden wir das machen? Es wäre wahrscheinlich nicht so einfach, einen solchen Algorithmus selbst zu schreiben :) Glücklicherweise reverse()weiß die Methode bereits, wie. Angenommen, uns gefällt die Tatsache nicht, dass die sort()Methode unsere Planeten alphabetisch sortiert, und wir möchten ihre Reihenfolge umkehren: von Z nach A:

public class Main {

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

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       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);

   }
}
Ausgabe: [Venus, Uranus, Saturn, Neptun, Merkur, Mars, Jupiter, Erde] Wir haben viel über das Sortieren, die Reihenfolge der Elemente usw. gesprochen. Aber was wäre, wenn wir das gegenteilige Ziel hätten? Angenommen, wir versuchen, ein Bingospiel zu implementieren. Wir fügen der Trommel 100 Zahlen hinzu. Sie sollten einzeln auf dem Bildschirm erscheinen. Der erste Spieler, der alle Zahlen auf seinem Spielschein durchgestrichen hat, gewinnt. Dies lässt sich einfach mit der Methode umsetzen shuffle():

public class Main {

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

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

           bingoDrum.add(i);// add the numbers 1 to 100 to the drum
       }

       Collections.shuffle(bingoDrum);// Mix it up
       System.out.println ("Your attention, please! Here are the first 10 numbers from the drum!");
       for (int i = 0; i < 10; i++) {

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

   }
}
Ausgabe: Bitte um Aufmerksamkeit! Hier sind die ersten 10 Zahlen aus der Trommel! 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 solarSystemListe erstellt, die die Planeten enthielt. Und es scheint in jeder Hinsicht zu uns zu passen, bis auf eines: Sie können Elemente daraus löschen und neue hinzufügen ! Dies ist eindeutig nicht das Verhalten, das wir erwarten: Das Sonnensystem sollte in unserem Programm unveränderlich sein. Die CollectionsKlasse hat eine sehr interessante Methode: unmodifiableList(). Es erstellt eine unveränderliche Liste aus der als Argument übergebenen Liste. Sie können dieser Liste keine Elemente hinzufügen oder daraus löschen. Wenn wir uns mit der Liste der Planeten im Sonnensystem befassen, ist das genau das, was wir wollen!

public class Main {

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

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune)));
       solarSystem.add("Pluto");// Try to add a new element
   }
}
Ausgabe: Ausnahme im Thread „main“ java.lang.UnsupportedOperationException bei java.util.Collections$UnmodifiableCollection.add(Collections.java:1075) bei Main.main(Main.java:21) Dies ist ein Fehler: Sie können nicht füge etwas hinzu solarSystem! Das Einzige, was Sie hier beachten müssen, ist die Tatsache, dass diese Methode List<>(nicht ArrayList<>) zurückgibt, da dieser Typ für alle Arten von Listen üblich ist. Eine weitere recht häufige Situation, die leicht passieren kann, besteht darin, dass der Programmierer Elemente in der falschen Reihenfolge hinzufügt. Sollte dies passieren und wir feststellen, dass Merkur und Neptun verwechselt sind, können wir diesen Fehler mit der swap()Methode korrigieren:

public class Main {

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

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
       , jupiter, saturn, uranus, mercury));// The planets are in the wrong order
       System.out.println(solarSystem);

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

   }
}
Wir übergeben der swap()Methode unsere Liste und die Indizes der beiden Elemente, die ausgetauscht werden müssen. Beachten Sie, dass die Methode mit Indizes und nicht mit Referenzen funktioniert. Hier mussten wir also die ArrayList.indexOf()Methode anwenden. Ausgabe: [Neptun, Venus, Erde, Mars, Jupiter, Saturn, Uranus, Merkur] [Merkur, Venus, Erde, Mars, Jupiter, Saturn, Uranus, Neptun] Schließlich lernen wir eine sehr interessante Methode kennen: disjoint(). Es prüft, ob sich zwei Sammlungen überschneiden, also mindestens ein identisches Element haben . Ist dies nicht der Fall, wird „true“ zurückgegeben. Wenn sie es tun, wird „false“ zurückgegeben

public class Main {

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

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       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, haben unsere beiden Listen völlig unterschiedliche Elemente, sodass das Programm true ausgibt . Dies ist eine interessante und sehr nützliche Klasse. Es Arraysnimmt uns eine Menge routinemäßiger, mühsamer Arbeit ab und ermöglicht es uns, uns auf andere Dinge zu konzentrieren.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION