Rheinwerk Computing < openbook >


 
Inhaltsverzeichnis
Materialien
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Arrays und ihre Anwendungen
5 Der Umgang mit Zeichenketten
6 Eigene Klassen schreiben
7 Objektorientierte Beziehungsfragen
8 Ausnahmen müssen sein
9 Geschachtelte Typen
10 Besondere Typen der Java SE
11 Generics<T>
12 Lambda-Ausdrücke und funktionale Programmierung
13 Architektur, Design und angewandte Objektorientierung
14 Java Platform Module System
15 Die Klassenbibliothek
16 Einführung in die nebenläufige Programmierung
17 Einführung in Datenstrukturen und Algorithmen
18 Einführung in grafische Oberflächen
19 Einführung in Dateien und Datenströme
20 Einführung ins Datenbankmanagement mit JDBC
21 Bits und Bytes, Mathematisches und Geld
22 Testen mit JUnit
23 Die Werkzeuge des JDK
A Java SE-Module und Paketübersicht
Stichwortverzeichnis


Download:

- Listings, ca. 2,7 MB


Buch bestellen
Ihre Meinung?



Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom

Einführung, Ausbildung, Praxis
Buch: Java ist auch eine Insel


Java ist auch eine Insel

Pfeil4 Arrays und ihre Anwendungen
Pfeil4.1 Einfache Feldarbeit
Pfeil4.1.1 Grundbestandteile
Pfeil4.1.2 Deklaration von Array-Variablen
Pfeil4.1.3 Array-Objekte mit new erzeugen
Pfeil4.1.4 Arrays mit { Inhalt }
Pfeil4.1.5 Die Länge eines Arrays über das Attribut length auslesen
Pfeil4.1.6 Zugriff auf die Elemente über den Index
Pfeil4.1.7 Typische Array-Fehler
Pfeil4.1.8 Arrays an Methoden übergeben
Pfeil4.1.9 Mehrere Rückgabewerte *
Pfeil4.1.10 Vorinitialisierte Arrays
Pfeil4.2 Die erweiterte for-Schleife
Pfeil4.3 Methode mit variabler Argumentanzahl (Varargs)
Pfeil4.3.1 System.out.printf(…) nimmt eine beliebige Anzahl von Argumenten an
Pfeil4.3.2 Durchschnitt finden von variablen Argumenten
Pfeil4.3.3 Varargs-Designtipps *
Pfeil4.4 Mehrdimensionale Arrays *
Pfeil4.4.1 Nichtrechteckige Arrays *
Pfeil4.5 Bibliotheksunterstützung von Arrays
Pfeil4.5.1 Klonen kann sich lohnen – Arrays vermehren
Pfeil4.5.2 Warum »können« Arrays so wenig?
Pfeil4.5.3 Array-Inhalte kopieren
Pfeil4.6 Die Klasse Arrays zum Vergleichen, Füllen, Suchen und Sortieren nutzen
Pfeil4.6.1 Eine lange Schlange
Pfeil4.7 Der Einstiegspunkt für das Laufzeitsystem: main(…)
Pfeil4.7.1 Korrekte Deklaration der Startmethode
Pfeil4.7.2 Kommandozeilenargumente verarbeiten
Pfeil4.7.3 Der Rückgabetyp von main(…) und System.exit(int) *
Pfeil4.8 Zum Weiterlesen
 

Zum Seitenanfang

4.5    Bibliotheksunterstützung von Arrays Zur vorigen ÜberschriftZur nächsten Überschrift

 

Zum Seitenanfang

4.5.1    Klonen kann sich lohnen – Arrays vermehren Zur vorigen ÜberschriftZur nächsten Überschrift

Wollen wir eine Kopie eines Arrays mit gleicher Größe und gleichem Elementtyp schaffen, so nutzen wir dazu die Objektmethode clone().[ 126 ](Das ist gültig, da Arrays intern die Schnittstelle Cloneable implementieren. System.out.println( new int[0] instanceof Cloneable); gibt true zurück. ) Sie klont – in unserem Fall kopiert – die Elemente des Array-Objekts in ein neues.

Listing 4.11    src/main/java/com/tutego/insel/array/CloneDemo.java, Ausschnitt, Teil 1

int[] sourceArray = new int[ 6 ];

sourceArray[ 0 ] = 4711;

int[] targetArray = sourceArray.clone();

System.out.println( targetArray.length ); // 6

System.out.println( targetArray[ 0 ] ); // 4711

Im Fall von geklonten Objekt-Arrays ist es wichtig, zu verstehen, dass die Kopie flach ist. Die Verweise aus dem ersten Array kopiert clone() in das neue Array, es klont aber die referenzierten Objekte selbst nicht. Bei mehrdimensionalen Arrays wird also nur die erste Dimension kopiert, Unter-Arrays werden somit gemeinsam genutzt:

Listing 4.12    src/main/java/com/tutego/insel/array/CloneDemo.java, Ausschnitt, Teil 2

Point[] pointArray1 = { new Point(1, 2), new Point(2, 3) };

Point[] pointArray2 = pointArray1.clone();

System.out.println( pointArray1[ 0 ] == pointArray2[ 0 ] ); // true

Die letzte Zeile zeigt anschaulich, dass die beiden Arrays dasselbe Point-Objekt referenzieren; die Kopie ist flach, aber nicht tief.

 

Zum Seitenanfang

4.5.2    Warum »können« Arrays so wenig? Zur vorigen ÜberschriftZur nächsten Überschrift

Arrays haben ein Attribut length und eine Methode clone() sowie die von Object geerbten Methoden. Das ist nicht viel. Für Arrays gibt es keine Klassendeklaration, also auch keine .class-Datei, die Methoden deklariert. Es gibt auch keinen Java-Code wie bei anderen Klassen wie String, Arrays oder System, die mit Javadoc dokumentiert sind und folglich in der API-Dokumentation auftauchen. Da es unendlich viele Array-Typen gibt – hinter jedem beliebigen Typ kann [] gesetzt werden –, würde das auch unendlich viele Klassendeklarationen nach sich ziehen.

Das, was Arrays können, ist in der Java-Sprachdefinition (JLS) festgeschrieben. Bei jeder neuen Methode oder Änderung müsste die JLS angepasst werden, was unpraktisch ist. Natürlich wären Methoden wie sort(…), indexOf(…) auf Array-Objekten praktisch, aber zu viel Eingebautes in der Sprache ist nicht gut und auch die Dokumentation solcher Methoden will Oracle aus der JLS heraushalten, und so sind die Methoden in eine Extraklasse Arrays gewandert.

[»]  Hinweis

Die Länge ist immer die Kapazität des Arrays. Es gibt keine Information darüber, wie viele Array-Elemente von uns in der Nutzung sind. Wenn das Array zum Beispiel 10 Elemente groß ist, aber nur die ersten 2 Positionen von uns verwendet werden, so müssen wir uns das selbst merken.

 

Zum Seitenanfang

4.5.3    Array-Inhalte kopieren Zur vorigen ÜberschriftZur nächsten Überschrift

Eine weitere nützliche statische Methode ist System.arraycopy(…). Sie kann auf zwei Arten arbeiten:

  • auf zwei schon existierenden Arrays: Ein Teil eines Arrays wird in ein anderes Array kopiert. arraycopy(…) eignet sich dazu, sich vergrößernde Arrays zu implementieren, indem zunächst ein neues größeres Array angelegt wird und anschließend die alten Array-Inhalte in das neue Array kopiert werden.

  • auf dem gleichen Array: So lässt sich die Methode dazu verwenden, Elemente eines Arrays um bestimmte Positionen zu verschieben. Die Bereiche können sich durchaus überlappen.

[zB]  Beispiel

Um zu zeigen, dass arraycopy(…) auch innerhalb des eigenen Arrays kopiert, sollen alle Elemente bis auf eines im Array f nach links und nach rechts bewegt werden:

System.arraycopy( f, 1, f, 0, f.length - 1 );     // links

System.arraycopy( f, 0, f, 1, f.length - 1 ); // rechts

Hier bleibt jedoch ein Element doppelt!

final class java.lang.System
  • static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

    Kopiert length Einträge des Arrays src ab der Position srcPos in ein Array dest ab der Stelle destPos. Der Typ des Arrays ist egal, es muss nur in beiden Fällen der gleiche Typ sein. Die Methode arbeitet für große Arrays schneller als eine eigene Kopierschleife.

Kopieren der Elemente von einem Array in ein anderes

Abbildung 4.2    Kopieren der Elemente von einem Array in ein anderes

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java ist auch eine Insel Java ist auch eine Insel

Jetzt Buch bestellen


 Buchempfehlungen
Zum Rheinwerk-Shop: Captain CiaoCiao erobert Java

Captain CiaoCiao erobert Java




Zum Rheinwerk-Shop: Java SE 9 Standard-Bibliothek

Java SE 9 Standard-Bibliothek




Zum Rheinwerk-Shop: Algorithmen in Java

Algorithmen in Java




Zum Rheinwerk-Shop: Objektorientierte Programmierung

Objektorientierte Programmierung




 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz

InfoInfo



 

 


Copyright © Rheinwerk Verlag GmbH 2021

Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.

Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

[Rheinwerk Computing]



Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de



Cookie-Einstellungen ändern