Home > Kredit ohne Schufa > Java Liste

Java Liste

In Java ist eine Liste ein Container, der Objekte in einer festen Reihenfolge enthält. Dazu gibt es Listen, z.B. ArrayList und LinkedList. Die Listen sind eine Art Sammlung, andere Arten sind Sets (Mengen) und Karten (Zuordnungen). Die ArrayList und LinkedList sind Klassen im Paket java.util import java.util. Die Listen sind ähnlich wie die Arrays, unterscheiden sich aber in einigen Punkten von ihnen.

Was sind die Vorteile von parametrisierten Modellen?

Das ist das Handschrift eines Beitrags, der in der Rubrik „Effektives Java“ im JSPEKTRUM veröffentlicht wurde. In den letzten beiden Hefte dieser Rubrik haben wir eine Serie neuer Sprachressourcen in Java 5.0 gestartet, die wir in dieser und den nachfolgenden Hefte aufgreifen werden. Unser Schwerpunkt sind die neuen sprachlichen Mittel der allgemeinen Typisierung (Java Generics) in Java 5.0 und die daraus entstehenden Parameter.

Parametrierte Types sind Types mit Typ-Argumenten. Die parametrierten Arten sind beispielsweise List, List, Map und WeakReference. Die parametrierten Typisierungen werden aus allgemeinen Typisierungen unter Verwendung von konkreten Typ-Argumenten für die Formaltyp-Parameter erzeugt. Beispiel für allgemeine Arten sind List, Map und WeakReference, wo E, K, U, V und H die Parameter des Formaltyps sind.

Die Typ-Parameter sind Platzhalter und werden später bei der Instanzierung durch Betontypen wie z. B. Zeichenkette, Datum usw. abgelöst. Dieser Artikel behandelt die grundlegenden Aspekte von allgemeinen und parametrierten Modellen. Was sind die Vorteile von parametrierten Modellen? Traditionellerweise, d.h. vor Java 5.0, wurden Kollektionen ohne Typ-Argumente benutzt.

Bei parametrierten Typisierungen ist das Beispiel nun so: Linkliste -Liste = neue Linkliste (); Liste. add(new Integer(0)); Ganzzahl i = Liste. get(0); Hier ist bereits im Quelltext angegeben, dass die Liste eine Liste mit Integer-Elementen ist. Dazu werden z. B. folgende Verfahren wie add() so konfiguriert, dass sie den Argumententyp Ganzzahl in einer LinkedList und den Argumententyp Zeichenkette in einer LinkedList haben.

Bei Verwendung parametrisierter Typisierungen wird die Typenprüfung zur Ausführungszeit durch eine Typenprüfung zur Übersetzung abgelöst. Selbstverständlich können auch Gegenstände von Untertypen der Elementart in einer solchen parametrierten Sammlung abzulegen sein. Aus Gründen der Übersichtlichkeit muss hinzugefügt werden, dass der Abguss beim Abruf aus der Sammlung noch durchgeführt wird, da der Kompiler ihn bei einer parametrierten Sammlung gemäß dem Typparameter ausführt.

Diese stillschweigend erzeugte Besetzung mag nach unserem Beispiel absurd klingen, ist aber darauf zurückzuführen, dass nicht-parametrisierte Modelle mit einem großen Parametrisierungsgrad vereinbar sind. Die Vereinbarkeit zwischen parametrierten und nicht-parametrierten Typisierungen ist sehr wünschenswert, so dass Legacy-Code, in dem nicht-parametrierte Typisierungen zum Einsatz kommen, mit neuen Codes, in denen parametrierte Typisierungen zum Einsatz kommen, genutzt werden kann.

Das detaillierte Typenverhältnis zwischen parametrierten und nicht-parametrierten Arten ist ein verhältnismäßig umfassendes und vielschichtiges Themengebiet. Allerdings ist zu beachten, dass die Nutzung parametrisierter Types keinen Performance-Vorteil beim Extrahieren von Elementen hat, da der Download immer noch impliziert ist. Grundsätzlich kann jedoch gesagt werden, dass durch den Einsatz von parametrierten Typisierungen und zusätzlichen Typüberprüfungen durch den Kompilierer zur Zeit der Übersetzung ein frühzeitiges Auffinden von Fehlern im Entwicklungsprozess verhindert werden kann.

Eine angenehme Wirkung dieses neuen Typs Sicherheit‘ ist zum Beispiel, dass Entwicklungsumgebungen, die Java 5.0 unterstÃ?tzen (wie z. B. Eklipse ab der 3.1-Version), nun bereits wissen, welche Art von Objekte mit der add()-Methode in eine Parametrisierung von Sammlungen eingespielt werden können und welche davon beim Erstellen des Quellcodes gar nicht erlaubt sind.

Die Überprüfung findet im klassischen Java-Code (ohne parametrisierte Kollektionen) viel später statt, und zwar beim Testen der Applikation, wenn der Download zum Zeitpunkt des Abrufs der Daten durchgeführt wird. Die parametrierten Varianten zeichnen sich durch eine bessere Eigendokumentation des Quellcodes aus. Inwiefern sind die allgemeinen Arten festgelegt? Der Einsatz vordefinierter generischer Typologien ist verhältnismäßig simpel.

Eine generische Art wie List hat einen Parameter, den Sie durch einen bestimmten ersetzen. Der Argumenttyp muss nicht notwendigerweise eine eigene Instanz sein, wie in unseren vorherigen Beispiel. Primärtypen (wie z. B. intern, z. B. Zeichen usw.) sind als Typ-Argumente nicht erlaubt. Generische Typdefinitionen sind etwas aufwendiger und erfordern ausreichende Sprachkenntnisse des Entwicklers, um solche generische Typologien zu entwickeln.

Betrachten wir ein Beispiel für die Festlegung eines simplen allgemeinen Typs: öffentlich Ein nächster (); öffentlich boolescher hatNächste (); } Der Schnittstelleniterator ist ein generischer Schnittstelle und hat einen Typenparameter B. Dieser dient als Platzhalter für einen Typen, der innerhalb der Schnittstelle wie ein reeller ist.

Typ-Parameter können auch als Argumenttyp von Verfahren oder für die Variablendeklaration benutzt werden. Für die Nutzung von parametrierten Typisierungen, die es für Normaltypen nicht gibt, gibt es einige Restriktionen. Typ-Parameter müssen von Zeit zu Zeit detaillierter als im Beispiel oben erläutert werden.

In der allgemeinen Schnittstelle Iterator kann später jeder Betontyp für den Typenplatzhalter B verwendet werden. null; Der allgemeine Datentyp TreeMap hat zwei Typ-Platzhalter für den Schlüsseltyp und den Werttyp der darin enthalten Schlüssel-Wert-Paare. Dies ist insofern ein Problem, als nicht alle Arten eine compareTo() Methodik haben. Zugelassen sind nur solche Arten, die eine compareTo() Methodik haben.

Dieses Erfordernis kann durch eine so genannte Bounds-Klausel ausgedrückt werden. Bei der Typparameterdefinition wird der Wert des Parameters nicht nur als „K“ angegeben, sondern als „K erweitert Comparable“. Die Ergänzung „extends Comparable“ ist die Bounds-Klausel und bewirkt, dass nur solche Types den Platz des Platzhalters für die Implementierung des Interfaces Comparable einnehmen können.

Zum Beispiel könnte der Type Zeichenkette benutzt werden, da die Class Zeichenkette das Schnittstelle Comparable implementier. Die Art Grenzen kann auch eine Gattung sein. Möglicherweise ist es auch möglich, dass die Bounds-Klausel aus einer Gattung und einer Menge von Schnittstellen zusammengesetzt ist. Ein Beispiel: Die Generikaklasse generisch hat einen von MeineKlasse abzuleitenden Type-Parameter und realisiert die Schnittstellen Comparable und Kloneable.

Als Type-Parameter ist die Class MeineKlasse auch erlaubt, wenn sie die Schnittstellen Comparable und Cloneable realisiert, d.h. der später für den Type-Platzhalter verwendete Type muss nicht notwendigerweise ein reeller Subtype der Bounds-Klasse sein, sondern kann auch die Bounds-Klasse selbst sein. Der Gebrauch des Stichwortes „extends“ in der Bounds-Klausel hat immer wieder zu Diskussion geführt.

Von den Sprachdesignern bei SO haben Sie es so eingestellt, dass Sie immer „extends“ schreiben müssen, unabhängig davon, ob die Bounds-Klausel nur eine Class oder nur Schnittstellen hat. Eine weitere Beschränkung gibt es bei der Benutzung von Interfaces: Die Bounds-Klausel darf keine unterschiedlichen Instanzierungen desselben allgemeinen Interface haben. Zum Verständnis wird nochmals auf den folgenden Artikel Bezug genommen, in dem die Typbeziehungen zwischen parametrierten Instanz eines Generic Type näher untersucht werden.

Der wirkliche Trick bei der Umsetzung eines eigenen allgemeinen Types ist nun die korrekte Auswahl der Parameter und der dazugehörigen Grenzen. 3 ) In einigen Fällen schließt dies auch den paketsichtbaren und geschützten Inhalt einer Bounds-Klasse ein, und zwar dann, wenn die Bounds-Klasse und die allgemeine Kategorie, in deren Bounds-Klausel die jeweilige Kategorie auftritt, im gleichen Paket sind.

Es können nicht nur Arten, sondern auch Verfahren sein. Nachfolgend ein Beispiel für eine allgemeine Vorgehensweise. Dies ist die Funktion max() aus der java_usw. iteratormodus xxi = xs. iterator(); wobei die Funktion für den Fall, dass (w. compareTo(x)) xi. next(); wenn ( (w. compareTo(x)) w = y = x; Rückgabewert ist; Diese Funktion gibt das grösste Objekt aus einer Sammlung zurück.

Daher ist in der Methodendefinition die Bounds-Klausel „A erweitert Comparable“ für den Element-Typ der Kollektion enthalten. Der Einsatz von generischen Verfahren ist wesentlich leichter als der Einsatz von generischen Verfahren, da eine eindeutige Typparametrierung nicht erforderlich ist. Nachfolgend ein Beispiel für den Zugriff auf die maximale () Methode: LinkedList ByteList = neue LinkedList(); ByteList. add((byte)0))); ByteList. add((byte)1)); Byte maxByte = Kollektionen. max(byteList); Sie rufen die allgemeine Funktion wie eine gewöhnliche Funktion auf und der Kompilierer erledigt den restlichen Teil.

Im Gegensatz zu allgemeinen Gattungen müssen Sie nicht ausdrücklich angeben, was für den Parameter des Typs B verwendet werden soll. Es macht eine so genannte Typinferenz, d.h. es betrachtet den Typen des an die Methodik weitergereichten Methodenargumentes, in unserem Beispiel den Typen der ByteListe, d.h. LinkedList, und schlussfolgert über den zu verwendenden Typen für den Platzhalter E.

Dies alles geht natürlich auch automatisiert und kann zu Fehlern und Fehlern werden, z.B. wenn der über die Inferenz bestimmte Datentyp die Bounds-Klausel überhaupt nicht einhält. Da der Objekttyp nicht vergleichbar ist, reicht die Bounds-Klausel nicht aus. Da die Nullreferenz keinen Wert hat, hat der Kompilierer keine Möglichkeit, aus der Nullreferenz Rückschlüsse darauf zu ziehen, was wahrscheinlich für den Parameter des Typs B verwendet werden würde.

Im obigen Beispiel haben wir ein weiteres Merkmal von Java 5.0 verwendet: das automatisierte Boxen und Entpacken. Entpacken ist die Umkehrkonvertierung, d.h. Entpacken eines Primitivtyps aus seinem Wrappertyp, d.h. die Umwandlung von Ganzzahl nach International Beide Konversionen sind seit Java 5.0 stillschweigend durch den Kompilierer vorgenommene Umrechnungen.

Der Rückgabewert der Funktion max() ist eine Byte-Referenz vom Wrappertyp, die durch automatisches Entpacken entpackt und dann dem Primitivtyp zugeordnet wird. Wenn es um allgemeine Verfahren und allgemeine Verfahren geht, stellt sich die Frage: Kann ich allgemeine Verfahren und allgemeine Verfahren miteinander verbinden, d.h. kann ich einen allgemeinen Verfahrenstyp festlegen und eine Verfahren mit neuen, separaten Verfahrensparametern in diesem Verfahrenstyp einrichten?

Ja, das ist in Java erlaubt. Das wirft die Fragen auf: Kann die allgemeine Methodik in der allgemeinen Klassen auch der Konstrukteur sein? Dabei gibt es keine Beschränkungen; alle starren und nicht-statischen Verfahren und die Konstrukteure können allgemeingültig sein und eigene typisieren. Ab wann gibt es eine solche Verbindung von Generika und Generika?

Weitere Verfahren ….. Sie können diesen Platzhalter des zweiten Typs der allgemeinen Wrapper-Klasse beifügen. Weitere Verfahren ….. Der zweite Typ-Parameter wird jedoch nur in dem einen Constructor verwendet. Es ist nicht richtig, dass der zweite Parameter des Typs an die generische Kategorie angehängt ist. Anstatt der gesamten Gattung zusätzliche Typ-Parameter zur Verfügung zu stellen, kann es ausreichend sein, wenn nur eine Methode einen Typ-Parameter erhält.

Wird der zweite Typ Parameter E ohnehin nur für den Constructor verwendet, sollten Sie die Parametrierung auch auf den Constructor eingrenzen. Weitere Verfahren ….. Er ist nun ein generischer Constructor mit eigenem Typ-Parameter für den Typ C; die Class hat nur noch einen Typ-Parameter für den Typ C. Dies ist ein Beispiel für eine allgemeine Methodik in einer allgemeinen Klass.

Im Übrigen sind statistische Verfahren wesentlich generischer als nicht-statische Verfahren. Der Grund dafür ist, dass Typ-Parameter einer Gattung nicht in stationären Verfahren benutzt werden dürfen. In jedem Fall können statistische Verfahren sowieso nicht auf die Typ-Parameter der Umgebungsklasse zurückgreifen und haben daher eigene Typ-Parameter. invoke(null); return null; und…. weitere Verfahren… Auf den Typ-Parameter vom Typ G der umschließenden Gattungsklasse kann die verwendete Technik nicht zurückgreifen.

Er hat daher einen eigenen Typ-Parameter für die statischen Verfahren. Die java. util-Paket ist voller Beispiele für solche allgemeinen Verfahren. Als Beispiel dient die java.util.Collections-Reihe. Wir wollten in diesem Beitrag die Grundzüge der allgemeinen Arten und Verfahren unterrichten. Die wichtigsten Elemente zur Festlegung von allgemeinen Arten und Verfahren wurden eingeführt.

Beispielsweise haben wir noch keine Platzhalter oder Probleme wie die Vereinbarkeit von generischem und nicht-generischem Typ erklärt. Zum Abschluss der Reihe werden wir die typischen Vorgehensweisen und mögliche Irrtümer bei der Umsetzung von Generika und Verfahren in einigen Fallbeispielen erörtern. Alle Serien über Java Generics:

Leave a Reply

Your email address will not be published.

Ja, auch diese Webseite verwendet Cookies. Hier erfahrt ihr alles zum Datenschutz