Einfach Verkettete Liste - addFirst()

kornelBg

Mitglied
Hallo zusammen,

ich bin gerade bei der Programierung meiner eigenen einfach verketteten Liste, ohne Java Collection Framework zu benutzen, um mir genauer die Datenstrukturen bzw. Referenztypen anzuschauen.

Ich habe 3 Klassen:

  • Mitarbeiter


Java:
public class Mitarbeiter {
	private String name;
	private String vorname;
	private double gehalt;

	public Mitarbeiter(String s1, String s2, double d) {
		this.name = s1;
		this.vorname = s2;
		this.gehalt = d;
	}

	public String getVorname() {
		return vorname;
	}

	public void setVorname(String vorname) {
		this.vorname = vorname;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getGehalt() {
		return gehalt;
	}

	public void setGehalt(double gehalt) {
		this.gehalt = gehalt;
	}

	public String toString() {
		return this.getName() + " " + this.getVorname() + ", "
				+ this.getGehalt();
	}

}

  • ListOfMitarbeiter

Java:
public class ListOfMitarbeiter {

	private Mitarbeiter data;
	private ListOfMitarbeiter next;

	/**
	 * Creates a list with only one element
	 * 
	 * @param data
	 */
	public ListOfMitarbeiter(Mitarbeiter data) {
		this.data = data;
		this.next = null;
	}

	/**
	 * Creates a list with new element Data and leaves the rest elements List
	 * 
	 * @param data
	 * @param list
	 */
	public ListOfMitarbeiter(Mitarbeiter data, ListOfMitarbeiter list) {
		this.data = data;
		this.next = list;
	}

	public ListOfMitarbeiter() {
		// TODO Auto-generated constructor stub
	}

	public Mitarbeiter getMitarbeiter() {
		return data;
	}

	public void setMitarbeiter(Mitarbeiter mitarbeiter) {
		this.data = mitarbeiter;
	}

	public ListOfMitarbeiter getNext() {
		return next;
	}

	public void setNext(ListOfMitarbeiter next) {
		this.next = next;
	}

	/**
	 * List to String, uses the toString methode from the Class Mitarbeiter
	 * Result collects whe whole information and returns it
	 */
	public String toString() {

		ListOfMitarbeiter current = this;
		String result = "";

		while (current != null) {
			result += current.data + "\n";
			current = current.next;
		}

		return result;
	}

	/**
	 * Checks the number of elements in current List
	 * 
	 * @return
	 */
	public int size() {

		ListOfMitarbeiter current = this;

		int counter = 0;

		while (current != null) {
			counter++;
			current = current.next;
		}

		return counter;

	}

	/**
	 * Adds the element Data at the end of the List
	 * 
	 * @param data
	 */
	public void addLast(Mitarbeiter data) {

		ListOfMitarbeiter current = this;

		int i = 0;
		int size = current.size();

		while (i < size) {

			if (current.next == null) {
				current.next = new ListOfMitarbeiter(data);
			}

			current = current.next;
			i++;

		}

	}

	public void add(Mitarbeiter data) {
		setMitarbeiter(data);
	}

}

  • und eine Klasse Test

Meine Frage betrifft die Implementierung der Methode
Java:
public void addFirst(Mitarbeiter data)
Die steht gerade in meinem Code nicht.
Die schon implementierte Methoden funktionieren, bzw. liefern das gewunschte Verhalten.

Ich hatte schon vieles ausprobieren, und es gibt immer diese zwei Ergebnisse bei meiner Implementirung von der Methode
Java:
public void addFirst(Mitarbeiter data)

  • das Programm terminiert nicht
  • das übergegebene Objekt data wird erst nach dem ersten Objekt angehängt

Mein erster Vorschlag war:

Java:
public void addFirst(Mitarbeiter data) {

this.next = new ListOfMitarbeiter(data, next);

}

Und zweiter:

Java:
public void addFirst(Mitarbeiter data) {

ListOfMitarbeiter current = this;
this.next = new ListOfMitarbeiter(data, current);

}

Hier terminiert das Programm nicht, es ensteht eine endlose Schleife.

Bei der Testklasse habe ich:

Java:
ListOfMitarbeiter myList = new ListOfMitarbeiter(m1);

myList.add(new Mitarbeiter("dummy", "dummy", 0000.00));
myList.addFirst(new Mitarbeiter("dummy1", "dummy1", 1000.00));

Das Sollte als Ergebnis liefern:

dummy1 dummy1, 1000.0
dummy dummy, 0.0

Ist so aber nicht.

Ich weiß es nicht warum, wie ich das richtig korriegiere.

Ich warte auf eure Vorschläge.

Grüße
 

JCODA

Top Contributor
Vorschlag ohne es ausprobiert zu haben:

Java:
public void addFirst(Mitarbeiter data) {
 
this.next = new ListOfMitarbeiter(this.data, next); // setze das "nächste" Element auf das derzeitige Data Element
 this.data= data; // Setze das den übergebenen Mitarbeiter auf die erste Position
}
 

kornelBg

Mitglied
Wie löschst du denn die ganze Liste?


Mit

Java:
public void clear() {

		this.next = null;
		this.data = null;
		this.size = 0;

	}

Dabei handelt es sich aber um kein vollständiges Löschen. Es wird nur ein null-Zeiger gesetzt.

Um dies zu vermeiden, bräuchte man ein zweites Attribut: außer dem "next", auch ein "last", der Zeiger auf das letzte Element.
 
Zuletzt bearbeitet:

kornelBg

Mitglied
Vorschlag ohne es ausprobiert zu haben:

Java:
public void addFirst(Mitarbeiter data) {
 
this.next = new ListOfMitarbeiter(this.data, next); // setze das "nächste" Element auf das derzeitige Data Element
 this.data= data; // Setze das den übergebenen Mitarbeiter auf die erste Position
}


Ans Vertauschen hätte ich nicht gedacht :)
 
Zuletzt bearbeitet:

minzee

Bekanntes Mitglied
Sollte man den Spezialfall data = null nicht noch irgendwie in addFirst berücksichtigen? if(this.data != null) this.next = ...
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
Hauptproblem ist, dass du eine "einfach verkettete Liste" implementierst.
Viele deiner Methoden suggerieren Ergebnisse, die sie in einer einfach verketteten Liste nur unter bestimmten Randbedingungen überhaupt liefern können (z.B. .size kann nur die Länge vom aktuellen Element bis zum Listenende liefern). Und .addFirst kann nur an aktuller Stelle einfügen.

Daher sind eher doppelt-verkettete Listen im Einsatz, wie du ja schon angedeutet hast.

Mit anderen Worten: Einige Methodennamen sollten dringend geändert werden zu dem, was sie tatsächlich machen.
Insbesondere
.size
.addFirst
.toString

Deine .add ist scheußlich, da sie ggf. den aktuellen MA überschreibt.
.addLast braucht keinen if (current.next == null) , da .size das ja sowieso schon sichergestellt hat.

Eine .delete(ToEnd) könnte durchaus "von hier bis zum Ende" alle Elemente löschen, das ließe sich z.B. rekursiv durchaus lösen.
 
Zuletzt bearbeitet:

Joose

Top Contributor
Java:
	public int size() {
		ListOfMitarbeiter current = this;
		int counter = 0;
		while (current != null) {
			counter++;
			current = current.next;
		}
		return counter;
	}

	public void addLast(Mitarbeiter data) {
		ListOfMitarbeiter current = this;
		int i = 0;
		int size = current.size();
		while (i < size) {
			if (current.next == null) {
				current.next = new ListOfMitarbeiter(data);
			}
			current = current.next;
			i++;
		}
	}

Kleine Optimierungsvorschläge zu diesen beiden Methoden:
Wenn du schon diese Art von Verkettung hast warum benutzt du diese dann nicht für die Methoden?

Java:
public int size() {
    int counter = 0;
    if(next!=null) {
        counter = next.size();
    }
    counter++;
    return counter;
}

public void addLast(Mitarbeiter data) {
    if(next== null) {
        next = new ListOfMitarbeiter(data);
    } else {
        next.addLast(data);
    }
}

Vor allem bei "addLast" sparst du dir dadurch den unnötigen "size()" Aufruf, welcher dafür sorgt das du 2x die Liste durchgehst.

[EDIT]
"addFirst" wird mit dieser Liste nicht möglich sein.
[/EDIT]
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
O Einfach verkettete Liste - Revert Methode Java Basics - Anfänger-Themen 1
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
R Erste Schritte Verkettete Liste will einfach nicht in meinen Schädel Java Basics - Anfänger-Themen 11
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
X Einfach Verkettete Liste Java Basics - Anfänger-Themen 16
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
N einfach verkettete liste fehler Java Basics - Anfänger-Themen 5
N einfach verkettete liste Java Basics - Anfänger-Themen 3
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
S einfach verkettete Liste Java Basics - Anfänger-Themen 19
T Einfach verkettete Liste: Wie Elemente löschen? Java Basics - Anfänger-Themen 4
D Einfach verkettete Liste Java Basics - Anfänger-Themen 20
C einfach verkettete Liste -> Elemente vertauschen Java Basics - Anfänger-Themen 2
R einfach verkettete Liste, intersect Java Basics - Anfänger-Themen 4
E einfach verkettete liste, nullPointerException Java Basics - Anfänger-Themen 5
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
V einfach verkettete Listen Java Basics - Anfänger-Themen 10
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
N Erste Schritte HelloWorld möchte einfach nicht laufen Java Basics - Anfänger-Themen 11
K Programm stoppt einfach ohne Grund Java Basics - Anfänger-Themen 4
N Best Practice Doppelte und einfach Anführungsstriche in Runtime.getruntime().exec() Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
Hanschyo Programm schließt sich einfach Java Basics - Anfänger-Themen 2
S Einfach verkette Liste Java Basics - Anfänger-Themen 27
Hacer Operationen einfach verketteter Listen Java Basics - Anfänger-Themen 22
C Methoden Einfach verkette Liste - int Werte aufsteigend sortieren Java Basics - Anfänger-Themen 1
V Codezeile wird einfach nicht ausgeführt Java Basics - Anfänger-Themen 23
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
N Einfacher Rechner (für mich nicht so einfach) Java Basics - Anfänger-Themen 5
M Array in ein Array übertragen (möglichst einfach) Java Basics - Anfänger-Themen 6
T Input/Output Daten/Objekte einfach speichern Java Basics - Anfänger-Themen 5
R Methoden... ich vesteh sie einfach nicht Java Basics - Anfänger-Themen 15
llabusch Verkette Listen - Einfach und Doppelt Java Basics - Anfänger-Themen 3
C Erste Schritte Problem mit der Division von Koeffizienten... oder einfach nur irgendwlechen zahlen Java Basics - Anfänger-Themen 10
D Klassen Klassen, Objekte, Konstruktor - einfach erklärt Java Basics - Anfänger-Themen 12
B Variable wird einfach so wieder auf "null" gesetzt Java Basics - Anfänger-Themen 12
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
S ich begreife es einfach nicht -> zweck der Schnittstellen Java Basics - Anfänger-Themen 27
J Interface Wie funktioniert das mit den Interfaces. Ich verstehe es einfach nicht! :( Java Basics - Anfänger-Themen 15
W Java-Programm als Icon mit Doppelklick einfach öffnen ? Java Basics - Anfänger-Themen 3
M Layout einfach bilden Java Basics - Anfänger-Themen 4
I Weiß einfach nicht mehr weiter... Java Basics - Anfänger-Themen 3
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
A If-Schleife spinnt - ganz einfach Code - Riesen Problem :) Java Basics - Anfänger-Themen 9
Luk10 einfach animation Java Basics - Anfänger-Themen 2
E JMC - Dlls einbinden - möglichst einfach Java Basics - Anfänger-Themen 8
I einfach verkette Liste Java Basics - Anfänger-Themen 9
H Typumwandlung String --> Int (ganz einfach) Java Basics - Anfänger-Themen 9
O Observer - Einfach erklärt? Java Basics - Anfänger-Themen 5
K Ich verstehe switch einfach nicht Java Basics - Anfänger-Themen 4
M jar-Datei einfach umbenennen? Java Basics - Anfänger-Themen 8
S Filewriter schreibt einfach nicht Java Basics - Anfänger-Themen 6
G Opjektorientierte Programmierung (OOP). einfach für euch Java Basics - Anfänger-Themen 4
X WAV conversion ist einfach nicht möglich Java Basics - Anfänger-Themen 2
J jar erstellen. Es klappt einfach nicht Java Basics - Anfänger-Themen 14
L Eingeben Rechnen Ausgeben - Leider nicht so einfach Java Basics - Anfänger-Themen 31
P einfach frage zur vererbung Java Basics - Anfänger-Themen 9
G Frank A. - ports einfach öffnen und schließen Java Basics - Anfänger-Themen 3
M Caeser Verschlüsselung ganz einfach(nicht für mich) Java Basics - Anfänger-Themen 6
L while wird einfach übersprungen? Java Basics - Anfänger-Themen 4
D einfach berechnung einer onlinezeit Java Basics - Anfänger-Themen 25
B Thread will einfach nicht stoppen Java Basics - Anfänger-Themen 12
B Packages einfach kopieren? Java Basics - Anfänger-Themen 13
N Mein Applet findet -online- einfach die Klasse nicht ! Java Basics - Anfänger-Themen 6
S Java rundet einfach auf 0 Java Basics - Anfänger-Themen 2
L Ein Bild auf ein JFrame legen. nicht so einfach? =( Java Basics - Anfänger-Themen 11
M Tablelayout einbinden - ich schaff's einfach nicht Java Basics - Anfänger-Themen 16
D Button Text will einfach nicht erscheinen Java Basics - Anfänger-Themen 6
M Methoden. ich versteh das einfach nicht! Bitte helfen! Java Basics - Anfänger-Themen 4
H Kann man in Java einfach einen Beep erzeugen Java Basics - Anfänger-Themen 2
C einfach aber komisch Java Basics - Anfänger-Themen 5
P Restart Button für einfach Applikation Java Basics - Anfänger-Themen 7
H RAF geht einfach nicht Java Basics - Anfänger-Themen 12
D RegEx Probleme - wahrscheinlich zu einfach. Java Basics - Anfänger-Themen 2
H Einfach Datenübergabe Java Basics - Anfänger-Themen 4
S RegEx Syntax - ich verstehe sie einfach nicht! Java Basics - Anfänger-Themen 3
V Teil eines Programms funktioniert einfach nicht Java Basics - Anfänger-Themen 2
V If Schleife wird beim ausführen einfach ignoriert Java Basics - Anfänger-Themen 4
D Einfach Leerzeile einfügen ? Java Basics - Anfänger-Themen 2
G Owner von JDialog;Komme einfach nicht weiter Java Basics - Anfänger-Themen 4
B Applet geht einfach nicht Java Basics - Anfänger-Themen 16
S UIManager kann einfach nicht aufgelöst werden Java Basics - Anfänger-Themen 4
R Einfach if-Abfrage Java Basics - Anfänger-Themen 7
B Eine Linie zeichnenmit Java, ich verstehe das einfach nicht Java Basics - Anfänger-Themen 4
A Einfach, gut erklärte Übungen!!! Java Basics - Anfänger-Themen 3
M Verkettete Liste Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
A Verkettete Liste Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben