Hallo,
ich habe einen mhrere Klassen umspannenden Code, bei dem ein Problem rund um eine Hashmap auftaucht:
Ich will letztlich in einer Hashmap alle möglichen Kombinationen aus 3 Zahlen, wobei die Zahlen aus 1-49 kommen und nichts doppelt vorkommt,
bilden und sie abzählen.
Die Hashmap soll dann einer gegebenen 3er Kombi ihre "Position" in der Gesamtliste angeben.
Halt einfach die Tripel durchzählen und die Hashmap gibt mir zu einem Tripel seine Listenposition an.
Habe nun die Codeteile
und
Die 3 fache for Schleife soll einfach systematisch alle Tripel durchgehen, das mitlaufende i gibt an das wievielte Tripel gerade gebaut wird.
Und das Tripel und i wird eben als key-value Paar in die Hashmap gepackt.
Nun nutze ich anderswo, natürlich nach dem obige Sachen ausgeühfrt wurden,einen Abschnitt
zur Erklärung:
Es gibt eine Array mit Connections, deren Details sind auch eher unwichtig gerade.
Es wird jedenfalls in jedem Durchlauf der äussersten Schleife, also für jedes i,
mittels des
eine 6 stellige Zahl gezogen.
Mit den 3 verschachtelten for Schleifen werden dann über die Indizes i1,i2,i3
dann 3 zahlen aus diesen 6 genommen und zu einem eigenen Byte[] Array zusammen gefasst.
Und nun soll im Befehl
eben mit ursprünglich erwähnter Hashmap zu diesem Tripel dessen Listenpositionszahl ermittelt werden und dem c Objekt hinzugefügt werden.
Problem nur am Ende:
Offensichtlich klappt das hinzufügen auch schon, nur gibt die Hashmap zu den übergebenen byte[3] immer nur null zurück, kurzum die .get(...) Methode der Hashmap findet angeblich nix!
Meine Vermutung ist dass die hashmap, um für einen EIngabewert zu gucken ob er ein Schlüssel, natürlich nicht die Inhalte des Arrays vergleicht sonderntidiotischerweise den Hashcode des byte[] Objekts.
Der natürlich nicht gleich ist weil die Arrays ja separat erzeugt wurden und "nur" die gleichen Werte beinhalten.
Frage wäre nun, wie kann ich das lösen?
Kann ich der Hashmap irgendwie vorschreiben wie sie eine EIngabe mit Shclüsseln vergleicht, dass sie bei 2 Arraysw die eben nicht anhand irgendwelcher esoterischer Hashcodes vergleicht sondern anhand ihrer Elemente?
ich habe einen mhrere Klassen umspannenden Code, bei dem ein Problem rund um eine Hashmap auftaucht:
Ich will letztlich in einer Hashmap alle möglichen Kombinationen aus 3 Zahlen, wobei die Zahlen aus 1-49 kommen und nichts doppelt vorkommt,
bilden und sie abzählen.
Die Hashmap soll dann einer gegebenen 3er Kombi ihre "Position" in der Gesamtliste angeben.
Halt einfach die Tripel durchzählen und die Hashmap gibt mir zu einem Tripel seine Listenposition an.
Habe nun die Codeteile
Java:
HashMap<Byte[], Short> TripleToCode = new HashMap<Byte[], Short>();
und
Java:
public TripleList() {
short i = 0;
// i1=1 bis 47 i2=i1+1 bis 48 i3=i2+1 bis 49 von 1
for (byte i1 = 1; i1 <= 47; i1++) {
for (byte i2 = (byte) (i1 + 1); i2 <= 48; i2++) {
for (byte i3 = (byte) (i2 + 1); i3 <= 49; i3++) {
System.out.println("i1,i2,i3=(" + i1 + "," + i2 + "," + i3 + ") with position " + i + "!");
TripleToCode.put(new Byte[] { i1, i2, i3 }, i);
used[i] = 1;
i++;
}
}
}
}
Die 3 fache for Schleife soll einfach systematisch alle Tripel durchgehen, das mitlaufende i gibt an das wievielte Tripel gerade gebaut wird.
Und das Tripel und i wird eben als key-value Paar in die Hashmap gepackt.
Nun nutze ich anderswo, natürlich nach dem obige Sachen ausgeühfrt wurden,einen Abschnitt
Java:
public void fillList() {
NumberGenerator numg = new NumberGenerator(6, 49);
for (int i = 0; i < connections.length; i++) {
// sixTupel
byte[] b = numg.getNumber();
Connection c = connections[i];
for (byte i1 = 0; i1 < b.length - 2; i1++) {
for (byte i2 = (byte) (i1 + 1); i2 < b.length - 1; i2++) {
for (byte i3 = (byte) (i2 + 1); i3 < b.length; i3++) {
//System.out.println("i="+i+", b(i1,i2,i3)="+b[i1]+","+ b[i2]+","+ b[i3]);
c.add(tripleList.TripleToCode.get(new Byte[] { b[i1], b[i2], b[i3] }));
}
}
}
c.list.trimToSize();
}
}
Es gibt eine Array mit Connections, deren Details sind auch eher unwichtig gerade.
Es wird jedenfalls in jedem Durchlauf der äussersten Schleife, also für jedes i,
mittels des
Code:
byte[] b = numg.getNumber();
Mit den 3 verschachtelten for Schleifen werden dann über die Indizes i1,i2,i3
dann 3 zahlen aus diesen 6 genommen und zu einem eigenen Byte[] Array zusammen gefasst.
Und nun soll im Befehl
Code:
c.add(tripleList.TripleToCode.get(new Byte[] { b[i1], b[i2], b[i3] }));
Problem nur am Ende:
Offensichtlich klappt das hinzufügen auch schon, nur gibt die Hashmap zu den übergebenen byte[3] immer nur null zurück, kurzum die .get(...) Methode der Hashmap findet angeblich nix!
Meine Vermutung ist dass die hashmap, um für einen EIngabewert zu gucken ob er ein Schlüssel, natürlich nicht die Inhalte des Arrays vergleicht sonderntidiotischerweise den Hashcode des byte[] Objekts.
Der natürlich nicht gleich ist weil die Arrays ja separat erzeugt wurden und "nur" die gleichen Werte beinhalten.
Frage wäre nun, wie kann ich das lösen?
Kann ich der Hashmap irgendwie vorschreiben wie sie eine EIngabe mit Shclüsseln vergleicht, dass sie bei 2 Arraysw die eben nicht anhand irgendwelcher esoterischer Hashcodes vergleicht sondern anhand ihrer Elemente?