gibt ein java Konstrukt, mit dem ich folgendes, eindeutige Datenstruktur [key, value] ablegen kann. um das ganze mal in "datenbanksprache" zu formulieren. key UND value sind quasi ein primärschlüssel. es soll also folgende ablage möglich sein:
Der Datensatz ["2" "Person 1"] dürfte also nicht abgelegt werden. Mit einem Set oder einer Map scheint das nicht zu gehen, da hier der key eindeutig sein muss. ich brauche aber etwas, wo key und value eindeutig sind.
jemand ne Idee, ich weiß im moment nicht wie ich das anstellen soll.
Einen Gruß.
um es vielleicht nohcmal anders zu formulieren. Wenn ich mir aus diesem Container einen Datensatz holen möchte, brauche ich den key und den value, also ungefähr so:
"An object that maps keys to values. A map cannot contain duplicate keys;"
Genau das ist ja mein Problem. Gibt es eine Datenstruktur in der sozusagen [key,value] Paare zusammen als Schlüssel ablegen werden können ? Gemäß dem obigen Fragment sollen also alle Daten eingefügt werden, deren key+value zusammen eindeutig ist, und nicht nur der key alleine. Das ist es doch :? :bahnhof:
Hallo,
also ich würde das folgendermaßen machen: einfach eine List nehmen wo ich meine Objekte reinknalle und die contains Methode von List überschreiben. Hier ein Beispiel: (ohne Gewähr und Anspruch auf sauberste Lösung)
Code:
import java.util.ArrayList;
import java.util.List;
public class ListTest {
public static void main(String[] args) {
List<TestData>list = new ArrayList<TestData>(){
public boolean contains(Object arg0) {
TestData other = (TestData)arg0;
for (TestData data : this) {
if (data.getObjid().equals(other.getObjid())&& data.getPerson().equals(other.getPerson())){
return true;
}
}
return false;
}
};
list.add(new TestData(1L,"Mueller"));
list.add(new TestData(1L,"Maier"));
list.add(new TestData(1L,"Bauer"));
TestData check = new TestData(1L,"Mueller");
System.out.println(list.contains(check));
}
}
class TestData {
private Long objid;
private String person;
public TestData(Long objid, String person){
this.objid = objid;
this.person = person;
}
public Long getObjid() {
return objid;
}
public void setObjid(Long objid) {
this.objid = objid;
}
public String getPerson() {
return person;
}
public void setPerson(String person) {
this.person = person;
}
}
In der Praxis würdest du beim Füllen deiner Liste mit contains z.B. in einer Schleife überprüfen ob das Element
schon enthalten ist. So hast du zum Schluss deine Liste in der nur "eindeutige" Testdaten sind. Hoffe das hilft.
Grundsätzlich gilt aber immer alles was man vor hat, 2 mal zu überdenken, da es oft einfachere Lösungen gibt, wie ich selber immer wieder feststelle.