HashMap Probleme

Nein, das ändert auch nichts :(
Echt schlimm.

Kannst du bitte mal folgendes Codestück bei deinem Beispiel einfügen (wenn es nicht zuviel Arbeit ist)

Wenn ich nämlich diese Methode aufrufe, bekomme ich immer false, obwohl der Student in der HashMap vorhanden ist:

public boolean findStudent(Student s) {
if (studentHM.containsKey(s)) {
return true;
}//if
else
return false;
}//findMatrikel

Danke,

EVA
 
Wieder Hallo!

Ich glaube so langsam wäre die ICQ Kommunikation effizienter ;-)

Code:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/*
 * Created on 04.05.2004
 */

/**
 * @author Thomas Darimont
 */
public class HashtableTest {
	
	private HashMap map = new HashMap();

	public static void main(String[] args) {
		new HashtableTest().testIt();
	}

	/**
	 * 
	 */
	private void testIt() {

		

		Student tom = new Student("Darimont", "Thomas", 122342);

		List lectureList = new ArrayList();

		Lecture lecture0 = new Lecture("Programmierung");
		Lecture lecture1 = new Lecture("Analysis");
		Lecture lecture2 = new Lecture("Consulting");

		lectureList.add(lecture0);
		lectureList.add(lecture1);
		lectureList.add(lecture2);

		map.put(tom, lectureList);

		//..........
		
		System.out.println(findStudent(tom));

		List list = (List) map.get(tom);

		Object[] items = list.toArray();
		for (int i = 0; i < items.length; i++) {
			System.out.println(((Lecture) items[i]).getName());
		}

	}

	public boolean findStudent(Student s) {
		if (map.containsKey(s)) {
			return true;
		} //if
		else
			return false;
	} //findMatrikel

	class Student {
		private int hashCode;
		private String vorname;
		private String nachname;
		private int matrikelNr;

		public Student(String name, String vname, int matNr) {
			nachname = name;
			vorname = vname;
			matrikelNr = matNr;
		}

		public int hashCode() {
			if (hashCode == 0) {
				hashCode = (matrikelNr + vorname + nachname).hashCode();
			}
			return hashCode;
		}

		/**
		 * @return
		 */
		public int getMatrikelNr() {
			return matrikelNr;
		}

		/**
		 * @return
		 */
		public String getNachname() {
			return nachname;
		}

		/**
		 * @return
		 */
		public String getVorname() {
			return vorname;
		}

		/**
		 * @param i
		 */
		public void setMatrikelNr(int i) {
			matrikelNr = i;
		}

		/**
		 * @param string
		 */
		public void setNachname(String string) {
			nachname = string;
		}

		/**
		 * @param string
		 */
		public void setVorname(String string) {
			vorname = string;
		}

	}

	class Lecture {
		private String name;

		public Lecture(String n) {
			name = n;
		}

		/**
		 * @return
		 */
		public String getName() {
			return name;
		}

		/**
		 * @param string
		 */
		public void setName(String string) {
			name = string;
		}

	}
}

Ausgabe:

true
Programmierung
Analysis
Consulting

Gruß Tom
 
Ja stimmt, ICQ wäre effizienter...

Aber wie ich sehe, funktioniert bei dir das Teil Das gibts ja nicht....

Ich werde wahrscheinlich irgendeinen kleinen Fehler haben, aber bei mir gehts echt nicht...

eva
 
Original geschrieben von Eva
Nein, das ändert auch nichts :(
Echt schlimm.

Kannst du bitte mal folgendes Codestück bei deinem Beispiel einfügen (wenn es nicht zuviel Arbeit ist)

Wenn ich nämlich diese Methode aufrufe, bekomme ich immer false, obwohl der Student in der HashMap vorhanden ist:

public boolean findStudent(Student s) {
if (studentHM.containsKey(s)) {
return true;
}//if
else
return false;
}//findMatrikel

Danke,

EVA

Hast Du eine equals()-Methode in der Student-Klasse? Wenn ja, wie sieht sie aus?
 
Original geschrieben von Eva
Ich habe mal ein Objekt Person und Objekte von Lehrveranstaltung:

Person p0 = new Person("sem02010", "Eva" , "Langegger");
Lecture l0 = new Lecture("Programming");

Dann speichere ich die Person als Key und generiere einen neuen Vektor. Danach hole ich mir den Vector und füge die Lehrveranstaltungen ein (als Beispiel nur ein Eintrag):

studentHashMap.put(p0, new Vector());
Vector vec0 = (Vector) studentHashMap.get(p0);
vec0.add(l0);

So generiere ich mir die HashMap! Es sind aber die Elemente sicher vorhanden, weil beim Debuggen kann ich sie mir angucken.

LG
Eva

Hm, komischer aber korrekter Code... Was ist, wenn Du den Vector vorher erzeugst und erst dann den HashMap Eintrag vornimmst, wenn auch was im Vector drin steht? Also ungefähr so:
Code:
Vector myVector = new Vector();
myVector.add( I0 );
studentHashMap.put( p0, myVector );

Oder geht das nicht, weil Du nachträglich in dem Vector was eintragen/ändern musst? Dann solltest Du einmal darüber nachdenken:
Code:
studentHashMap.put(p0, new Vector());
Vector vec0 = (Vector) studentHashMap.get(p0); 
vec0.add(l0); 
studentHashMap.put(p0, vec0);
Musst nur mal schauen, ob bei gleichem Key der alte Eintrag überschrieben wird. Wenn nicht, den alten Eintrag per remove entfernen.
 
Hallo,

danke für deine Hilfe, aber ich bin gestern in der Nacht noch auf meinem Fehler draufgekommen:
Ich habe meine Methode equals() falsch überschrieben :-(
naja, aber jetzt weiß ich wenigstens....

lg
eva
 
Zurück