Collections Wie funktioniert List() ?

Terry12

Aktives Mitglied
hi,
wir sind heute im Unterricht Listen durchgegangen , dabei versteh ich einiges nicht,

erstmal :
Code:
public class List {
private int size;
private ListElement first;     
private ListElement last;

// also ListElement first und last sind Objekte der Klasse ListElement und haben nur den Pointer first und last auf diese Objekte oder? Warum tu ich die in die class List am Anfang rein?
bzw woher weiss der Compi dass diese die ersten bzw das letze Listenelement ist?

public List() {
first = null;
last = null;
size = 0;
} // das ist meine eigentliche Leere Liste

class ListElement{
protected Object data; // Was ist dieses Object data? 
protected ListElement next; //Was ist ListElement next??
   
ListElement (Object o, ListElement le) {
data = o;
next = le;   }  // das Listenelement bekommt object o  und weist dieses zur eigenen Eigenschaft data zu... das Listenelement le zeigt auf den Pointer next????

}
public void addLast(Object o) {
if (last ==null)
addFirst(o);
else {
 last.next = new ListElement(o, null) // Was bedeutet der zweite Parameter null?
last = last.next; 
size ++ ;}
}
Kann mir jemand mal die einzelnen Elemente die ich mit Kommentaren versehen habe erklären ? danke...
 

Terry12

Aktives Mitglied
class ListElement{
protected Object data;
protected ListElement next;

ListElement (Object o, ListElement le) {
data = o;
next = le;

also die Klasse ListElement hat zwei Eigenschaften object data (woher kommt object?) und einen pointer next auf ListElement ..

dann bekommt der Konstruktor ListElement als Parameter ein Object o und einen pointer le auf ein anderes ListElement ? Also ListElement le konstruirt sich quasi selber vom Konstruktor ListElement und übergibt sich selber an den Konstruktor ListElement , davon zeigt der pointer le dann auf next , und next wiederum ist der pointer auf das Klassenattribut ListElement in der class ListElement ???
Also irgendwie versteh ich das nicht .... ;)
 
F

Firephoenix

Gast
Stell dir die Liste doch einfach als einen Güterzug vor, du weißt wie lang der Zug ist und du kennst den ersten und den letzten Güterwagen.
Java:
private int size;
private ListElement first;     
private ListElement last;
der kleinste Fall eines Güterzugs ist der ohne wagen, das bedeutet es gibt keinen ersten und letzten Wagen und die Größe ist 0.
Java:
public List() {
first = null;
last = null;
size = 0;
}

Betrachtest du jetzt deine Güterwagen hat jeder Wagen einen Inhalt (da alle Klassen in java von Object erben kann das eben alles sein) und jeder wagen kennt den nächsten Wagen der an ihm dran hängt.
Java:
protected Object data;
protected ListElement next;

Um einen neuen Wagen zu erstellen musst du dem Wagen sagen welchen Inhalt er hat und was sein nächster Wagen ist (hat er keinen nächsten ist das halt null)
Java:
ListElement (Object o, ListElement le) {
data = o;
next = le;   }  // das Listenelement bekommt object o  und weist dieses zur eigenen Eigenschaft data zu... das Listenelement le zeigt auf den Pointer next????

}

Jetzt gehst du davon aus, dass du irgendeinen Zug hast (er kann auch leer sein) und du willst in diesen neue Güter einladen, dazu wirst du einen neuen Wagen brauchen. Du musst auch dafür sorgen, dass deine Informationen über den ersten und letzten wagen noch korrekt sind falls jemand mit dem Zug arbeiten will.
Deswegen schaust du zuerst ob du einen letzten Wagen hast, gibt es diesen nicht bedeutet das, dass du erstmal den ersten Wagen erstellen musst, ich vermute das wird addFirst machen.
Der else Zweig wäre der Fall, dass du schon einen Zug aus x Wagen hast, entsprechend auch first und last.
Du erzeugst dir also einen neuen Wagen den du anhängen willst und packst in den Wagen die Güter die angehängt werden sollen. Der neue Wagen wird der letzte sein, kriegt also keinen Nachfolger, daher kommt das o und das null im Konstruktor des neuen ListElements.
Dieses setzt du jetzt als Nachfolger deines letzten Wagens.
Jetzt weiß jemand der den Zug verwenden will aber noch nicht, dass der letzte Wagen nicht mehr der letzte Wagen ist, also änderst du auch das entsprechend so, dass der letzte Wagen der angehängte Wagen wird. (Stell dir ein Schild vor auf dem "letzter Wagen" steht, dass du einfach einen Wagen nach hinten hängst).
Dannach aktualisierst du noch die Größe (du hast ja einen Wagen angehängt) und bist fertig.
Java:
public void addLast(Object o) {
if (last ==null)
addFirst(o);
else {
 last.next = new ListElement(o, null) // Was bedeutet der zweite Parameter null?
last = last.next; 
size ++ ;}
}

Ein anschaulicheres Beispiel fällt mir gerade nicht ein :)

Gruß
 

Terry12

Aktives Mitglied
super danke das war sehr anschaulich !
allerdings , wenn ich die Klasse :

class ListElement{
protected Object data;
protected ListElement next;

mit den zwei Klassenattributen habe, was genau sind das ? Object data ist irgendeine Datei zu einem Objekt bzw ein objekt selber, und was ist ListElement next? ist das nur ein Pointer next der auf irgendein ListElement zeigt? Und warum muss ich das als Klassenattribut in ListElement deklarieren?
ich versteh halt einfach nicht wie der Compiler versteht dass next auf irgendein nächstes Listenelement zeigt bzw woher festgelegt wird dass next ein nächstes Element zu dem vorherigen Element ist,
man könnte es genausogut auch "rot" nennen oder "apfelkuchen" ?!
 
F

Firephoenix

Gast
Genau,
das sind ja nur 2 Variablen, das Feld Object data kannst du dir vorstellen wie der Container von dem Güterwagen oder wie einen Schrank. Durch das Feld/die Variable weißt du wo der Container bzw der Schrank steht, greifst du jetzt bei einem ListElement mit .data auf das Feld zu bekommst du den Inhalt, z.B. das Objekt Regenmantel das du gestern in den Schrank getan hast, oder den Atommüll aus den Nachbarländern der gerade im Güterzug umher gefahren wird ;)

Der "Zeiger" auf das nächste Element muss auch nicht unbedingt next heißen, birnensalat42 würde es genauso tun, man sollte aber immer versuchen Felder und Methoden so zu benennen, dass sie selbst erklären was sie tun - was bei next nunmal der zweck wäre sich das nächste Element zu merken,
dass das auch tatsächlich gegeben ist, dafür musst du als Programmierer dann selbst sorgen, ein Beispiel findest du ja in deiner add-Methode.

Gruß
 

Terry12

Aktives Mitglied
eine Frage hab ich noch,
die

public class List {
private int size;
private ListElement first;
private ListElement last;

hat ja Instanzen von ListElement first und last , bzw pointer auf diese Elemente, spricht man dann auch von einer Hat-eine-Beziehung ? in Bezug auf Vererbung
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H contains (für LIST) funktioniert nicht - ich weiß nicht warum? Java Basics - Anfänger-Themen 7
A Signierte Exe Datei funktioniert nicht mehr Java Basics - Anfänger-Themen 1
A Signierte Exe Datei funktioniert nicht mehr Java Basics - Anfänger-Themen 3
C my_table.setRowSelectionAllowed(true) funktioniert nicht; Java Basics - Anfänger-Themen 0
B Warum funktioniert die Lösung von CodeGym aber meine nicht? Java Basics - Anfänger-Themen 3
I Webservice funktioniert nicht Java Basics - Anfänger-Themen 5
C Abbruch einer Schleife mit break, meine Übung funktioniert nicht richtig Java Basics - Anfänger-Themen 4
S Erstes Programm: Hallo Welt funktioniert nicht. Java Basics - Anfänger-Themen 3
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
G .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
Garrit1994 Continue funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
B Methoden Übergebe Variabel funktioniert nicht Java Basics - Anfänger-Themen 17
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
Fugover Programm funktioniert nicht Java Basics - Anfänger-Themen 11
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
M Java printf(Locale.... funktioniert nicht Java Basics - Anfänger-Themen 3
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
districon Backtracking funktioniert nicht ganz Java Basics - Anfänger-Themen 3
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
S Schleife funktioniert nicht Java Basics - Anfänger-Themen 2
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
T % funktioniert nicht Java Basics - Anfänger-Themen 2
D e(fx)clipse installieren funktioniert nicht Java Basics - Anfänger-Themen 3
D GPIO Nutzung mit Pi4J Library auf Raspberry funktioniert nicht Java Basics - Anfänger-Themen 3
F Java GUI-PaintComponent funktioniert nicht Java Basics - Anfänger-Themen 1
J equals funktioniert nicht - Warum Java Basics - Anfänger-Themen 13
L hilfe run button funktioniert nicht Java Basics - Anfänger-Themen 13
I Array funktioniert nicht. Java Basics - Anfänger-Themen 2
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
G Programm mit Schleife funktioniert nicht Java Basics - Anfänger-Themen 5
T Redirect funktioniert nicht Java Basics - Anfänger-Themen 3
R Mein Plugin funktioniert nicht? Java Basics - Anfänger-Themen 10
J Zufallszahl funktioniert nicht Java Basics - Anfänger-Themen 27
D Klassen add Methode funktioniert nicht. Java Basics - Anfänger-Themen 31
J ImagaIO funktioniert nicht unter Ubuntu Java Basics - Anfänger-Themen 23
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
N Wochentagberechner Ausgabe funktioniert nicht Java Basics - Anfänger-Themen 7
G Mein Java Projekt funktioniert nicht Java Basics - Anfänger-Themen 5
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
P Zeichenkette Zeichen ausschlißen funktioniert nicht richtig Java Basics - Anfänger-Themen 9
F Primzahlsuche Schleife funktioniert nicht, HILFE! Java Basics - Anfänger-Themen 8
M Methoden Arrays.deepequals() funktioniert nicht Java Basics - Anfänger-Themen 2
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
F Input/Output die eine txt-Datei funktioniert die andere nicht Java Basics - Anfänger-Themen 8
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
P Upload Button funktioniert nicht Java Basics - Anfänger-Themen 13
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
A TicTacToe funktioniert bis auf "schiefer" Sieg Java Basics - Anfänger-Themen 6
M Erste Schritte Importieren funktioniert nicht Java Basics - Anfänger-Themen 7
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
F FileCreation - PrintWriter funktioniert nicht... Java Basics - Anfänger-Themen 1
I Collections.shuffle funktioniert nicht Java Basics - Anfänger-Themen 1
T Methode in Klasse funktioniert nicht Java Basics - Anfänger-Themen 14
T While Schleife funktioniert nicht Java Basics - Anfänger-Themen 14
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
M Frage, wie dieser Code funktioniert, bzw. weshab er bei mir nicht funktioniert Java Basics - Anfänger-Themen 4
L Level Reset funktioniert nicht Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben