Java ArrayList vom Typ <T>?

FrazeColder

Lt. Commander
Dabei seit
Okt. 2013
Beiträge
1.582
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!
 

FrazeColder

Lt. Commander
Ersteller dieses Themas
Dabei seit
Okt. 2013
Beiträge
1.582
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:

Musicon

Lieutenant
Dabei seit
Okt. 2011
Beiträge
957
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:

Rossie

Captain
Dabei seit
Dez. 2010
Beiträge
4.001
Meine erste Frage ist, was ist den eine ArrayList vom Typ T bitte
http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedMethods.html#What is a parameterized (or generic) method?

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

Die Java-Collections Klassen funktionieren (momentan) nur mit Objekt-Typen!
 

fRaNkLiN

Lt. Junior Grade
Dabei seit
Aug. 2005
Beiträge
498
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.
 

FrazeColder

Lt. Commander
Ersteller dieses Themas
Dabei seit
Okt. 2013
Beiträge
1.582
@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?
 

FrazeColder

Lt. Commander
Ersteller dieses Themas
Dabei seit
Okt. 2013
Beiträge
1.582
@SaxnPaule: Ja, aber ich mache das mit "<" oder ">" Operatoren gleich beim sortieren...
Warum soll ich Compareable verwedenden?
 

crvn075

Lt. Junior Grade
Dabei seit
Juli 2015
Beiträge
428
@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?
 

sdwaroc

Captain
Dabei seit
Juni 2013
Beiträge
3.873
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.
 

FrazeColder

Lt. Commander
Ersteller dieses Themas
Dabei seit
Okt. 2013
Beiträge
1.582
Werde ich mal machen. Danke!

Aber ich weiß immer noch nicht, wie ich mein Array an die andere Klasse als ArrayList übergeben soll...
 

sdwaroc

Captain
Dabei seit
Juni 2013
Beiträge
3.873
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.
 

FrazeColder

Lt. Commander
Ersteller dieses Themas
Dabei seit
Okt. 2013
Beiträge
1.582
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...-.-
 
Top