Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich arbeite an einem Projekt für die Uni und benötige ein Container-File oder ähnliches, um folgende Daten zusammen zu führen und miteinander zu verknüpfen.
1. ein Point
2. ein Piece (eigene Klasse)
3. ein Integer
EDIT: Ich sollte wohl noch erwähnen, dass alle 3 Typen auch mehrfach mit gleichem Wert (also z.B. 10 Integer mit Wert 5) vorkommen können. Daher kommt ein Set nicht in Frage.
Als Key - Objekt könnte sowohl der Point als auch der Integer benutzt werden, dies spielt keine Rolle.
Problematisch ist jedoch, dass das Piece keine hashCode() unterstützt und ich dies auch nicht implementieren kann (equals(object o) funktioniert jedoch wunderbar). Gleichzeitig kann ich mir hier keine neue Klasse schreiben (hängt an der Eigenart des Projekts).
Leider kenne ich mich mit den Collections in Java kaum aus und weis nicht, ob es bereits eine gibt, welche mir diese Möglichkeit offenbart?
Ich bedanke mich schonmal bei all denen die sich dies durchlesen.
Die Antwort klingt ja auf den ersten Blick ganz einfach, aber ich wüsste nicht, wie ich in einer Array-List Objekte in Abhängigkeit zueinander setzen kann.
Ich habe dies bisher nur verwendet, um Objekte darin "zu sammeln" und über den Index anzusprechen; aber mehre Typen reinhauen und auch noch verknüpfen - planlos!
also Verknüpfung ist ja nur Map, neben HashMap gibts da offensichtlich noch TreeMap, sonst nix,
oder du steckst in die ArrayList nicht alle Objekte einzeln sondern zusammengehörige Objekte in Unter-Listen,
auch ein zweidimensionales Object-Array ginge,
aber alles nur blau geraten, 'Verknüpfung' ist ja ein ziemlich allgemeiner Hinweis
List<Object[]> list = new ArrayList<Object[]>();
list.add(new Object[] { new Point(x,y), new Piece(), 10 });
for (Object[] array : list) {
for (Object o : array) {
if (o == null) continue;
else if (o instanceof Point)
Point p = (Point) o;
else if (o instanceof Piece)
Piece p = (Piece) o;
else if (o instanceof Integer)
int i = (Integer) o;
}
}
List<Object[]> list = new ArrayList<Object[]>();
list.add(new Object[] { new Point(x,y), new Piece(), 10 });
for (Object[] array : list) {
for (Object o : array) {
if (o == null) continue;
else if (o instanceof Point)
Point p = (Point) o;
else if (o instanceof Piece)
Piece p = (Piece) o;
else if (o instanceof Integer)
int i = (Integer) o;
}
}
Vielen Dank für die Vorschläge!
Obigen habe ich übernommen. Somit lässt sich relativ gut suchen. Hoffe nur, dass es die Performance bei vielen Suchgängen nicht drückt.
Es soll schließlich ein Tetris-Autoplayer werden, der möglichst gut Tetris spielt :-D -> Es wäre unschön, wenn er mit dem Berechnen nicht hinterher kommt.
schlechte, aber absolut gültige implementierung von hashCode. java stellt sehr geringe forderungen an die methode. steht aber auch alles in der API doc von java.lang.Object
klar, der vorteil einer hashmap kann sich nur dann ausspielen, wenn man eine wirklich gute hashCode methode anbietet. aber notwendig ist es nicht. man kann weiterhin auf die bequeme funktionalität einer map zurückgreifen, allerdings zu hohen kosten.
denn warum sollte man aufgrund dieser überlegungen auf eine map verzichten, wenn genau das die art und weise ist, wie man auf seine objekte zugreifen will? man kann völlig problemlos gegen eine map als container entwickeln und wenn irgendwann die performance in den keller geht, muss man sich lediglich überlegen, wie man eine anständige hashCode methode schreiben kann. wesentlich weniger aufwand, als seine arraylist wieder rauszufaktorieren.