LinkedHashSet

Status
Nicht offen für weitere Antworten.

scaary

Bekanntes Mitglied
Hallo.

Ich hab ein Problem, und zwar soll ich ein Game of Life schreiben (was jetzt nicht das richtige problem ist). Ich lass da sganz einfach ueber nen Array laufen.

Mein Eigentliches Problem ist das LinkedHashSet, dass wir benutzen sollen, dass wir aber noch nicht durchgenommen haben, und ich verstehs leider auch nicht so richtig. Ich hab mich jetzt schon im Forum umgeschaut, aber ich versteh einfach wirklich nicht, wie ich das benutzen soll.

Und zwar soll ich die Koordinaten alle lebendigen Zellen in dieser LinkedHashList speichern.

dazu hab ich mir erstmal einfach ne Klasse CELL geschrieben, die die entsprechenden Daten speichert:



Code:
public class Cell {

    int x;
    int y;
    Cell next;
    
    Cell (int x, int y) {
	this.x = x;
	this.y = y;
	next = null;
    }
}


In meiner Klasse Game of Life schaut dass dann (gekuerzt) so aus:

Code:
import java.util.*;

public class GameOfLife implements Grid {

    private int col;
    private int row;


  public void next() {
	

	for (int i = 0; set.iterator(i); i++) {
	}
    }

Die Methode Next soll einfach nur die LinkedHashList durchlaufen und mir halt die X und Y koordinaten der Lebenden Zellen ausgeben.

Aber meine Frage jetzt:
Wie greife ich auf einzelne Zellen der Liste Zu? Wie stell ich denn meinen "Next-Zeiger" auf eine Zelle ein, so dass cih die auslesen kann? Und vor allem: Wie mache ich mir denn einen Next Zeiger hier?


Ich hoffe, ihr koennt mir helfen :(

Danke schonmal im Vorraus.
 

@x.l

Bekanntes Mitglied
Du durchläufst die Liste mit einem Iterator. Set#iterator

#edit
Code:
Iterator it = set.iterator();

while(it.hasNext()){
    Object o = it.next();
}
 

scaary

Bekanntes Mitglied
ahsooo,
und dann arbeite ich einfach direkt mit dem "Object o" weiter, gelle?

Supi, danke.

EIne Frage haette ich jetzt noch:
Wie enau entferne ich ein Objekt aus de rListe?

Ich weiss, dass es die methode "remove()" gibt.

Wuerde dementsprechend der folgende Code seinen Zweck erfuellen und das entsprechende Objekt aus der Liste entfernen?

Code:
 public void setDead(int col, int row, boolean dead) {
	field [col][row] = 0;
	Cell n = new Cell (col, row);
	if (set.contains(n)) {
	    set.remove(n);
	}
    }

Danke!!
 

scaary

Bekanntes Mitglied
Hallo.

Noch ein kurzes Problem mit dem LinkedHashSet:


Code:
   private  LinkedHashSet<Cell> set;

Code:
set.add (new Cell(5, 5));
		 System.out.println (set.contains(new Cell (5, 5)));

Warum kommt bei folgenden Code denn false raus??

Danke.
 

didjitalist

Bekanntes Mitglied
weil deine Cell klasse Object#equals nicht überschreibt und daher die identität verglichen wird, die bei zwei exemplaren natürlich unterschiedlich ist.
 
G

Guest

Gast
Hallo!

Habe mit der LinkedHashList auch so meine Probleme...

Habe mir gedacht, wenn ich das Spielfeld ausgebe, laufe ich einfach über das 2-dimensionale Array. Bei lebendigen Zellen soll aber die Abfrage gemacht werden, ob diese in der LinkedHashList enthalten sind; wenn ja, soll ein anderes Zeichen ausgegeben werden.

Hier habe ich nun auch mein Problem: Um Überprüfen zu können, ob die LHL eine Zelle enthält, muss ich ja die equals-Methode überschreiben. Hab mal so angefangen (Methode steht in der Klasse Cell):

Code:
public boolean equals(Cell cell){
    	
    	if (cell != null) { 
    		return (this.equals(cell));
    	} else { 
    		return false;
    	}
    }//end of equals

Das hat aber keinen Effekt, da ich ja den Zelleninhalt, also eigentlich die beiden Zahlen in der Zelle auf Gleichheit mit den Zahlen in einer anderen Zelle überprüfen müsste. Mit this.x kann ich aber keinen Vergleich machen.

Anscheinend stehe ich da aufm Schlauch. Kann mir da jemand nen Tipp geben, wie ich die equals-Methode hinkriege?

Danke schonmal.
 
M

maki

Gast
Wenn du equals überschreibst, solltest du auch hashcode überschreiben,letzteres muss unbedingt sein für LinkedHashSet;

Einfachster Weg in Eclipse:
rechtsklick in den Code -> source -> generate hashcode and equals
Dann die Attribute wählen (x & y ?), fertig.

Ansonsten kannst du ja mal nach hashcode & equals Googlen bzw. die API Doku von Object ansehen, ist ncht ganz einfach anfangs.
 
G

Guest

Gast
@maki: Danke für den Tipp mit Eclipse. So funktioniert die Spielfeldausgabe richtig.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben