Wann Arrays, wann Collections?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
ich programmiere schon recht lange, aber ich verwende immer ja nach gusto arrays oder Collections, wie es gerade bequemer ist.
Gibt es da vielleicht eine Art Richtlinie, wann man, das einer oder andere benutzen sollte?
Klar, wenns um primitive Datentypen geht, sind sie wohl meist in ienem Array besser aufgehoben, aber sonst?

Gruß und dank,
Benny
 
A

anderer Gast

Gast
Arrays machen eigentlich nur Sinn, wenn es sich um eine feste, unveränderliche Anzahl von Elementen handelt.
 

musiKk

Top Contributor
Ich denke nicht, dass es davon abhängen sollte, ob der Inhalt aus primitiven Typen besteht, oder nicht.

Ich verwende ebenfalls nur Collections. Wenn eine API ein Array verlangt, dann reicht mir auch toArray(). Der Overhead dabei ist recht gering, intern speichern die gängigen Lists die Daten auch nur in Arrays.
 

207

Mitglied
generell kann man sagen kannst/solltest du collections vorziehen (das zeigt auch das einige sprachen ohne feste arrays auskommen siehe python). auch wenn es sich um primitves handelt .. durch autoboxing hast du keinen zusaetzlichen aufwand. collections machen dir das leben einfacher .. mehr funktionalitaeten, dynamisch und an der effizienz hab ich auch noch niemand meckern hoeren
 
G

Gelöschtes Mitglied 5909

Gast
ich verwende immer arrays wenn es ohne zusätzlichen aufwand geht oder eben ein array verlangt wird
 
M

maki

Gast
Ausschliesslich Collections, arrays sind viel zu primitiv für den normalen Gebrauch und so gar nicht OO.

Arrays nur in Ausnahmefällen, wo sie Sinn ergeben, zB. bei der Serialisierung ;)
 

Landei

Top Contributor
Ein weiterer Grund, Arrays in Java wenn möglich zu vermeiden ist, dass sie nicht typsicher sind:

Code:
Integer[] intArray = new Integer[1];
Number[] numArray = intArray; //sowas gehört verboten, und ist es bei Collections auch
numArray[0] = Long.valueOf(1); //Kawumm!!! ArrayStoreException
 
S

SlaterB

Gast
naja, Collections vermeiden diesen Umstand, indem sie überhaupt keinen Typ haben ;)
von Generics abgesehen
 
G

Gast

Gast
Landei hat gesagt.:
Es gibt keinen Grund, eine Collection ohne Generics zu verwenden. :meld:

Oh doch! Wir wissen alle was der Grund Nr.1 dafür ist, keine Generics zu verwenden. Musste vor 3 Monaten noch mit jdk1.3 gezwungenermassen arbeiten.
 

Marco13

Top Contributor
Arrays bei einer festen Anzahl von Elementen, auf die man indiziert zugreifen muss. Insbesondere sollte man aber Arrays i.a. nicht nach außen geben und nicht (als Referenz) von außen übernehmen.
 

byte

Top Contributor
Mir fällt spontan kein Grund ein, warum man Array und nicht ArrayList benutzen sollte, ausser für Typsicherheit pre Generics.
 
S

SlaterB

Gast
ein Array kann man gut bei Methoden

public void x(String... y);

übergeben

> Mir fällt spontan kein Grund ein, warum man Array und nicht ArrayList benutzen sollte, ausser für Typsicherheit per Generics.

soll der Satz übrigens andersrum
"Mir fällt spontan kein Grund ein, warum man ArrayList und nicht Array benutzen sollte, ausser für Typsicherheit per Generics."
heißen? sonst passt Generics irgendwie nicht

edit: pre statt per tatsächlich auch gemeint, von mir falsch korrigiert
 

byte

Top Contributor
SlaterB hat gesagt.:
ein Array kann man gut bei Methoden

public void x(String... y);

übergeben
Varargs übergibt man meistens doch als Einzelwerte.

"Mir fällt spontan kein Grund ein, warum man ArrayList und nicht Array benutzen sollte, ausser für Typsicherheit per Generics."
heißen? sonst passt Generics irgendwie nicht
Wenn mich nicht alles täuscht, sollte mein Satzbau stimmen. ;)
 

byte

Top Contributor
Ich benutze das Collection Framework, also List entweder mit ArrayList oder LinkedList je nach Anwendungsfall. ArrayList benutzt im Hintergrund ein Array, insofern gibts keinen richtigen Grund, direkt Array zu benutzen. Bei Java 1.4 und abwärts könnte man Array benutzen wegen der Typsicherheit, aber selbst das halte ich für unsinnig.
 
G

Gast2

Gast
Ich benutze das Collection Framework, also List entweder mit ArrayList oder LinkedList je nach Anwendungsfall. ArrayList benutzt im Hintergrund ein Array, insofern gibts keinen richtigen Grund, direkt Array zu benutzen. Bei Java 1.4 und abwärts könnte man Array benutzen wegen der Typsicherheit, aber selbst das halte ich für unsinnig.

also war dein satz oben doch falsch ;)
 

byte

Top Contributor
SlaterB hat gesagt.:
Integer enthält int,
es gibt keinen echten Grund, int zu benutzen ;)
Das ist doch nun was vollkommen anderes. Aber im Grunde hast Du recht. Ich benutze int nur für lokale Variablen, sonst immer Integer.

Ansonsten erklärt mir bitte was hieran falsch war, denn ich sehe es nicht: ;)
byto hat gesagt.:
Mir fällt spontan kein Grund ein, warum man Array (und nicht ArrayList) benutzen sollte [...]
 
S

SlaterB

Gast
Erklärung:
es gibt kaum einen Grund Array zu benutzen, soweit korrekt,
aber wieso dann "ausser für Typsicherheit per Generics"?

bei Arrays kann man doch gar kein Generics anwenden


-------

ausser übrigens besser mit ß, wenn ich das recht einschätze, sonst kommt man noch von der Strasse ab ;)
 
G

Gast2

Gast
Mir fällt spontan kein Grund ein, warum man Array und nicht ArrayList benutzen sollte, ausser für Typsicherheit pre Generics.

der satz heißt du würdest arrays wegen der Typsicherheit pre Generics verwenden.

array und generics????
 
M

maki

Gast
byto hat doch recht ;)

pre vs. per

Mir fällt spontan kein Grund ein, warum man Array und nicht ArrayList benutzen sollte, ausser für Typsicherheit pre Generics.
könnte man auch als
Mir fällt spontan kein Grund ein, warum man Array und nicht ArrayList benutzen sollte, ausser für Typsicherheit wenn man keine Generics verwenden kann.
formulieren.
 
S

SlaterB

Gast
@musiKk
die meisten Fehler sind ja höchstens Tippfehler oder nicht spürbar (nähmlich mit h),
ein bewußt gesetztes Doppel-s an falscher Stelle macht mir aber schon eher ein Gruseln

@maki
ah, hatte pre als 'per' gelesen ;)
 

byte

Top Contributor
Ich gebe zu, der Satz war schon etwas sehr minimalistisch formuliert. :lol: Aber Dr. Watson hat den Fall aufgeklärt. :cool:
 

Der Müde Joe

Top Contributor
byto hat gesagt.:
SlaterB hat gesagt.:
Integer enthält int,
es gibt keinen echten Grund, int zu benutzen ;)
Das ist doch nun was vollkommen anderes. Aber im Grunde hast Du recht. Ich benutze int nur für lokale Variablen, sonst immer Integer.

J.Bloch: Effective Java SE, Item 49: Prefer primitive types to boxed primitives.
Spricht dagegen die WrapperKlassen zu benutzen.

zB wegen sowas:
Code:
Comparator<Integer> naturalOrder = new Comparator<Integer>() {
	@Override
	public int compare(Integer first, Integer second) {
		return first < second ? -1 : (first == second ? 0 : 1);
	}
};
 

byte

Top Contributor
Der Müde Joe hat gesagt.:
J.Bloch: Effective Java SE, Item 49: Prefer primitive types to boxed primitives.
Spricht dagegen die WrapperKlassen zu benutzen.

zB wegen sowas:
Code:
Comparator<Integer> naturalOrder = new Comparator<Integer>() {
	@Override
	public int compare(Integer first, Integer second) {
		return first < second ? -1 : (first == second ? 0 : 1);
	}
};
Hast Du Dir die Implementierung ausgedacht? Das JDK implementierts vernünftig:
Code:
    public int compareTo(Integer anotherInteger) {
	int thisVal = this.value;
	int anotherVal = anotherInteger.value;
	return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
    }

Ich benutze lokal wie gesagt auch primitive Typen, als Member dann hingegen die Wrapper. Wie willst Du z.B. einen primitiven int per ORM als null persistieren?
 

Der Müde Joe

Top Contributor
>Hast Du Dir die Implementierung ausgedacht?

Nein. Ging mir auch mehr darum, dass es durch Mischung von primitiven mit geboxten Typen sehr schnell zu Fehlern kommen kann. Nicht nur beim ungeschulten Auge. ;-)

>Das JDK implementierts vernünftig:

Klar. Das Boxing passiert vor dem ==. (Habs darum extra weggelassen, da es nur zum Teil schief geht (bei valueOf nicht aber bei new Integer schon)

>als Member dann hingegen die Wrapper.
Wenn persisiert werden muss, dann muss man sich "leider" den Gegebenheiten anpassen.

Wollte damit eigentlich nur sagen, wenn nicht notwendig, nie die Wrapper-Klasse zu benutzten. Dank boxing zwar bequem aber auch gefärlich.
 

0x7F800000

Top Contributor
Arrays sind imho in folgenden (in vielen Bereichen kaum relevanten) Fällen angebracht:
- Irgendwelche regelmäßigen Gitter in Quaderförmigen teilmengen eines Kartesischen Raumes
(Bilder, irgendwelche eingebetteten Geometrischen Strukturen, Zelluläre Graphen o.ä.)
- Für "quasi-primitive" Klassen wie Tupel, Zykel, Vektoren aus K^n, Matrizen, Vertices aus Computergrafik und solche Geschichten, die man wieder eigentlich nur benötigt, wenn man irgendwelche geometrische Sachen darstellen will.
- Für Datenstrukturen a'la ArrayList, falls einem java.util.* nicht reicht, und man selbst aus irgendeinem Grund eine neue Datenstruktur entwerfen will.

=> zusammenfassend: Irgendwelche Strukturen fester Größe, bei den es nicht auf die Daten an sich, sondern auf die Operationen, die auf diese Daten angewandt werden, ankommt. In einer Verwaltungssoftware für Briefmarkensammler haben irgendwelche Arrays dagegen nicht viel zu suchen. :###
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
W Wann Rückgabewerte 0, 1, -1? Java Basics - Anfänger-Themen 27
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Wann Methode abstract? Java Basics - Anfänger-Themen 10
S Wann buffer löschen? Java Basics - Anfänger-Themen 5
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
I Wann ist Client plattformunabhängig? Java Basics - Anfänger-Themen 22
M Best Practice Wann eine Methode schreiben ? Java Basics - Anfänger-Themen 14
K Warum funktioniert das und wann erden die Objektmethoden nun ausgeführt? Java Basics - Anfänger-Themen 7
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
M Wann final verwenden? Java Basics - Anfänger-Themen 5
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
K Wann Vererbung und wann Interface verwenden? Java Basics - Anfänger-Themen 12
D Wann genau nutze ich ein solches Interface? Java Basics - Anfänger-Themen 3
K Wann genau brauche ich die Anweisung gleich null? Java Basics - Anfänger-Themen 10
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
S OOP Wann Proxies und Interfaces? Java Basics - Anfänger-Themen 3
P Threads Wann läuft es parallel ab ? Java Basics - Anfänger-Themen 4
C Variablen Wann werden Instanzvariablen initalisiert? Java Basics - Anfänger-Themen 10
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
T Ab wann ist es ein großes Projekt? Java Basics - Anfänger-Themen 35
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
H Wann ein Objekt der Programmklasse in main anlegen Java Basics - Anfänger-Themen 2
G Wann ist ein == Vergleich bei Gleitkommazahlen fahrlässig? Java Basics - Anfänger-Themen 8
T Wann for und wann while?? Java Basics - Anfänger-Themen 35
-horn- Wann wird alles NaN erzeugt? Java Basics - Anfänger-Themen 22
S Wann wird eine Klasse geladen? Java Basics - Anfänger-Themen 17
C this - wann verwende ich das? Java Basics - Anfänger-Themen 10
T Threads - Ab wann wirds Kritisch?! Java Basics - Anfänger-Themen 7
M Wann muss man eine Variable mit set-/get-Methoden in eine Bean schreiben? Java Basics - Anfänger-Themen 19
G field public/private wann Java Basics - Anfänger-Themen 11
GambaJo Ab wann neue Klasse erzeugen? Java Basics - Anfänger-Themen 2
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
B objekt wann als final deklarieren? Java Basics - Anfänger-Themen 2
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
S wann static Funktionen wann nicht Java Basics - Anfänger-Themen 6
N Wann und wie oft finalize Methode verwenden( überschreiben ) Java Basics - Anfänger-Themen 6
Bernasconi Programmierstil / Wann eine neue Datei? Java Basics - Anfänger-Themen 5
M wann, welche schleife Java Basics - Anfänger-Themen 3
M Ab wann ist die Datei sichtbar? Java Basics - Anfänger-Themen 3
G Herausfinden, wann mehrere Threads abgeschlossen sind Java Basics - Anfänger-Themen 3
G Überprüfen wann ein Dokument abläuft? Java Basics - Anfänger-Themen 3
N SAX, StAX, JDOM oder DOM , ab wann welches für XML Java Basics - Anfänger-Themen 14
M Wann ist ein Programm beendet? Java Basics - Anfänger-Themen 6
G Wann am besten getSize() aufrufen? Java Basics - Anfänger-Themen 6
I Festellen wann Methode in anderer Klasse fertig ist Java Basics - Anfänger-Themen 5
M wann statische klassen? Java Basics - Anfänger-Themen 14
M Wann ist initialisieren sinnvoll? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
R Wann benutzt man << oder >> ? Java Basics - Anfänger-Themen 2
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste und Arrays Java Basics - Anfänger-Themen 12
N mehrdimensionale arrays Java Basics - Anfänger-Themen 12
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
S Hilfe bei Praktischen Aufgaben von Arrays Java Basics - Anfänger-Themen 39
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
J Mehrdimensionale Arrays Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
M Arrays Java Basics - Anfänger-Themen 3
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
Ostkreuz Summieren von Arrays Java Basics - Anfänger-Themen 4
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben