Verständnisproblem @ java (Collections)

hallo!

Ich versteh diesen Code nicht ganz... also wenn jetzt value = 3 ist und erstes Element, dann kommt es in die if Anweisung rein und da ist schon mein Problem:
Was für einen Wert nimmt nun first an? Ich stelle mir das jetzt so vor, dass first = new Element (3, null), oder bedeutet das first = 3 ?
Dann, wenn ich nun das erste Element festgelegt habe, ruf ich die Methode (also in der Main.java) nochmals auf mit value = -5 ... nun geht das direkt in die else Anweisung und ab da versteh ich das zeug nicht mehr.
Also ich stell mir das jetzt so vor, dass -5 festgelegt wird und dann, wenn es in der Element.java Klasse keinen anderen next Wert als "null" gibt, wird insert eingefügt als next Element (doch wie kann das gehn: insert ist doch sowas: (-5, null) ... najo für mich ist dieser Code total unlogisch und einfach nur verwirrend ...
Also mich würd interessieren, wie nun das abläuft (in LinkedList.java), wenn ich zB 3 -5 4 7 in der Main ausgebe (wie merkt sich das Programm die Zahlen?)... ich bitte euch um eine gute Erklärung !

Ich hab hier einen Teil meiner Linkedlist:

Code:
 public class LinkedList {
private Element first;
public LinkedList() {
first = null;
}
public void add(int value) {
Element insert = new Element(value, null);
if (first==null) {
first=insert;
} else {
Element current = first;
while (current.getNext() != null)
current = current.getNext();
current.setNext(insert);
}
}

Die Variablen beziehen sich auf diese Klasse Element:

Code:
public class Element {
private int value;
private Element next;
public Element(int value, Element next) {
this.value = value;
this.next = next;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Element getNext() {
return next;
}
public void setNext(Element next) {
this.next = next;
}
}

MFG
 
du erstellst hier eine "verkettete Liste", deswegen LinkedList...

First ist die erste Stelle der Liste: ist die gleich "null", also leer, wird das Element mit insert da reingetan...
ist die nicht leer, holen wir uns mit getNext() die nächste stelle... ist die null, wird diese dann auf current gesetzt und hier weiter reingetan...

Lies hierzu mal: Wikipedia: Datenstruktur Liste
 
Danke für die Antwort, aber ich weiß schon wie die LinkedList funktioniert, aber mir gehts nur darum wieso der Code funktioniert, so wie er geschrieben ist.
Was für einen Wert nimmt zB nun "first Element" an (ich weiß, alles andere als null, aber ...) ? Das versteh ich nämlich nicht ... also es wird jetzt zB "value = 3" angenommen, da steht aber das element noch auf "null" ... nimmt nun first 3 an, oder wie? Weil "null" kann es ja nicht wieder annehmen und mit (3, null) kann ich ja nix anfangen, da wird ja nur in Element.java der Konstruktor auf value = 3 und next = null geändert, oder?
Und wenn wir nun zB in der Main.java den 3. add Aufruf machen mit zB 2 dann nimmt current = 3 an (3 ist erstes Element) und dann kommen wir zur while-schleife ... und was kann die dann so großartiges machen? in der getNext Methode ist ja nur das Element von letzthin gespeichert ... also zB 5 ...
Najo bin total auf der Leitung bei diesem Code

MFG
 
es hängt davon ab, ob die liste leer ist oder nicht...

ist die liste leer (first == null, first ist immer der erste "Platzhalter" der Liste), dann wird first = value (weil first = insert, insert = new Element (value,..)
also: laut deinem Beispiel 3

ist die liste nicht leer, wird die liste von vorne durchsucht...

current = first, und dann while (current.getNext() != null), also solange der Platzhalter NACH current nicht leer ist, hole current.getNext() und setze es auf current, also solange suchen bis platz ist, und DANN wird am dort angefangen die Zahlen reinzuschieben...

zur veranschaulichung empfehle ich dir Jeliot runterzuladen...
das Programm zeigt dir quasi was ein Java Code ausführt, also markiert die Zeile und zeigt die die Variablen und methoden, was gemacht wird und welche werte angenommen werden...

Hier link:
Jeliot

Jeliot kann direkt in die BlueJ Entwicklungsumgebung eingebunden werden:
BlueJ


gruss
 
vielen dank!

aber wie benutze ich nun das jeliot? Also ich hab 3 files main.java, linkedlist.java und element.java ... das Programm kapiert nicht, dass die alle zusammen gehören :P

ajo zum Platzhalter ...

also ich hab jetzt die Methode main (ein Teil) so:

Code:
linkedlist list = new linkedlist();

list.add(3);
list.add(-5);
list.add(2);
list.add(7);

System.out.println(list);

Also wenn current = first dann heißt das nichts anderes als wenn er von list.add(3) wieder anfängt und bis list.add(7) geht? -_-
und in Element wird next einfach so gespeichert public Element (3, -5, null) ?
 
hol am besten noch BlueJ dabei, weil dann kannst du die progs direkt in bluej reinladen und von BlueJ aus jeliot starten.. ( es geht auch mit jeliot alleine, aber wie weiss ich leider nicht)
(PS: bei bluej auch die jeliot extension runterladen)


Bin mir nicht ganz sicher ob ich verstanden habe was du meinst, aber mit der main schiebt der einfach nur die 4 zahlen rein...

das current = first ist eifach nur das setzen auf den anfang der liste...
 
ok danke ... ich werd mir das zeugs mal in Zeitlupe ansehn hrhr :D

EDIT: Ich weiß haargenau welcher code was macht, aber ich check einfach nicht, wo die ganzen Objekte gespeichert werden ... und von wo sich der JavaInterpreter dann das ganze merkt ... -_- wo werden diese Objekte gespeichert ... zB was heißt jetzt current = first? kann man das genau gleich interpretieren wie Element current = new insert(value,null) wenn ja, dann sollte das Prog ja nicht mehr in die while Schleife (egal welche Position) rennen weil ja current = first ist und das ist ja 3 null und lässt sich ja nicht ändern -_- ............... wie kann man sich das vorstellen omg :( *schniiiiiieeef*
 
Zurück
Oben