Java ArrayList vom Typ <T>?

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
Hey Community,

Ich habe hier eine Aufgabe und soll ein Array Sortieren lassen.
Ein normales Array und keine Array List.

Allerdings soll ich eine Methode schreiben die so aussieht:
Code:
public static <T extend Comparable<T>> void applyBubbleSort (ArrayList <T> liste, boolean ascending)

Meine erste Frage ist, was ist den eine ArrayList vom Typ T bitte und wenn ich eine Methode mit ArrayLIST schreiben soll, dann muss ich doch bestimmt auch mein Array zu einer ArrayList umdeklinieren. Oder?

MfG und Danke!
 
Ja, ich soll eine Zahlen mit dem Bubble Sort sortieren. Allerdings frage ich mich noch, wofür ich Compareable benutzten soll...

Was mich jetzt verwirrt ist aber, dass ich bei diesem Code:
Code:
Sorting.applyBubbleSort(new ArrayList<T>(Arrays.asList(a)), ascending);

Das hier gesagt bekomme:
Multiple markers at this line
- a cannot be resolved to a variable
- T cannot be resolved to a type
- The constructor ArrayList<T>(List<int[]>) is undefined
- Bound mismatch: The generic method applyBubbleSort(ArrayList<T>, boolean) of type Sorting is not applicable for the arguments (ArrayList<T>, boolean). The inferred type T is not a valid substitute for the
bounded parameter <T extends Comparable<T>>

a ist bei mir ein Array vom Typ int[]!
 
Zuletzt bearbeitet:
Comperable überschreibt die methode:

compareTo(T o)

damit kannst du jedes beliebige übergebene "ding" vergleichen ;)

z.b. so ausprogrammieren

@Override
public int compareTo(Bier b) {
if (b.getName() == null && this.getName() == null) {
return 0;
}
if (this.getName() == null) {
return 1;
}
if (b.getName() == null) {
return -1;
}
return this.getName().compareTo(b.getName());
}

Nun weißte ob das "ding" größer oder kleiner des aktuellen "dings" ist.

lg
 
Zuletzt bearbeitet:
FrazeColder schrieb:
Meine erste Frage ist, was ist den eine ArrayList vom Typ T bitte

http://www.angelikalanger.com/Gener...#What is a parameterized (or generic) method?

FrazeColder schrieb:
und wenn ich eine Methode mit ArrayLIST schreiben soll, dann muss ich doch bestimmt auch mein Array zu einer ArrayList umdeklinieren. Oder?

Lässt sich auch zur Laufzeit umwandeln: http://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html

Aber wenn man später ohnehin eine Liste verwenden muss, ist es vermutlich besser auch vorher schon eine Liste zu verwenden. Die Benutzung ist ohnehin sehr ähnlich. Eine ArrayList ist quasi ein dynamisches Array (verwendet intern auch ein Array).

Ich würde standardmäßig auf die Collection-Typen setzen und nicht auf Array.
Ergänzung ()

FrazeColder schrieb:
a ist bei mir ein Array vom Typ int[]!

Die Java-Collections Klassen funktionieren (momentan) nur mit Objekt-Typen!
 
FrazeColder schrieb:
Was mich jetzt verwirrt ist aber, dass ich bei diesem Code:
Code:
Sorting.applyBubbleSort(new ArrayList<T>(Arrays.asList(a)), ascending);

Das hier gesagt bekomme:

[...]

a ist bei mir ein Array vom Typ int[]!
Zunächst mal muss gesagt werden, dass ArrayLists immer eine Klasse als Füllung brauchen, primitive Typen gehen nicht. Dein int[] müsstest du also erstmal auf ein Integer[]-Array mappen.

Folglich musst du dann auch den Methodenaufruf so bauen:
Code:
Sorting.applyBubbleSort(new ArrayList<Integer>(Arrays.asList(integerArray)), ascending);

Außerdem sagt dir der Compiler, dass er keinen Zugriff auf a hat - folglich ist wohl das int[]-Array außerhalb des Scopes deines Aufrufs.
 
@Musicon: Vielen Dank!
Das wusste ich allerdings schon ;)
Nur ich meine, mein Bubble Sort sortiert ja. Und ich kann ihn ja gleich so sortieren lassen, dass er die ArrayList entweder "Ascending" oder gleich "Decending" sortiert. Wofür also Compareable?

@fRaNkLiN: und wo übergebe ich dann mein Integer Array a mit den entsprechenden Zahlen zum sortieren?
 
@SaxnPaule: Ja, aber ich mache das mit "<" oder ">" Operatoren gleich beim sortieren...
Warum soll ich Compareable verwedenden?
 
FrazeColder schrieb:
@SaxnPaule: Ja, aber ich mache das mit "<" oder ">" Operatoren gleich beim sortieren...
Warum soll ich Compareable verwedenden?

Lies dir mal durch, was Generics sind (Link oben). Deine Lösung muss allgemeingültig sein. Die Logik für großer und kleiner kann dabei nur der sortierte Typ selbst wissen. 5 ist vielleicht größer als 3, aber was ist größer, wenn du orange und grün vergleichst?
 
Und bitte bedenkt, dass die Signaturen der Funktionen in der Aufgabenstellung warscheinlich vorgegeben sind. Eine Anpassung der Methodenköpfe ist also nicht möglich auch wenn es sinnvoll scheint und ist. :D

@Topic:
Hier sollen ja beliebige Daten verglichen werden, also auch selbstgeschribene Klassen. Dafür müssen sie natürlich Comparable sein und dein Programm muss wissen, wie es sie vergleichen musss. Es geht hier nicht nur um die Sortierung von Primitiven.
 
Werde ich mal machen. Danke!

Aber ich weiß immer noch nicht, wie ich mein Array an die andere Klasse als ArrayList übergeben soll...
 
Zur Not die Bananevariante mit for-Schleife und simplem ArrayList.add(SourceArray), dann die ArrayList übergeben.

Oder eben die Version mit dem integer[] statt int[] Array.. Ist eleganter und eben nicht die Bananevariante.
 
Also. Ich habe jetzt alles hinbekommen. Aber wieso zum Hänger wird diese Methode nicht ausgeführt?

Er springt im Debug Modus zwar in die if-Bedingung rein, doch nicht in die Sorting Klasse...
Code:
if(input.equalsIgnoreCase("Ascending")){
Sorting.applyBubbleSort(new ArrayList<Integer>(Arrays.asList(a)), true);
}else{
Sorting.applyBubbleSort(new ArrayList<Integer>(Arrays.asList(a)), false);
}
Ergänzung ()

Der Fehler war, ich habe F6 gedrückt... -.-
Ergänzung ()

Ein Problem habe ich noch, an dem ich schon 30 min sitze...

Wie zum fick mache ich mit einer ArrayList ein Dreieckstausch?
Ich mache die ganze Zeit was falsch...

Erst hatte ich indexOf, dann add, dann set, aber immer kommt:
"The left handsite must be assginet to a variable"

Wie mache ich einen Dreieckstausch...-.-
 
Zurück
Oben