Java Generics: Array mit Generika [doppelt]

8

Ich wurde beauftragt, eine Hash-Tabelle in Java zu schreiben, die mit jedem Datentyp arbeiten muss. Die Regeln für den Code, den ich schreibe, sind wie folgt: - Die Hash-Tabelle muss ein Array als zugrunde liegende Datenstrukturen mit einer Größe haben, die zum Zeitpunkt der Konstruktion des Objekts festgelegt wurde - Wenn eine Kollision auftritt, sollte das Element, das kollidiert, in eine verknüpfte Liste platziert werden, die alle Elemente an diesem Index (Schlüssel) in der Hash-Tabelle

enthält

Daher habe ich für den zugrunde liegenden Datentyp ein Array vom Typ LinkedList (benutzerdefiniert, nicht die Java API LinkedList) erstellt.

%Vor%

Das Problem besteht natürlich darin, dieses Array zu instanziieren. Hier sind einige meiner Versuche:

%Vor%

Dies löst einen generischen Generierungsfehler beim Kompilieren aus.

%Vor%

Das verursacht einen ClassCastException Fehler zur Laufzeit ( java.lang.Object kann nicht in LinkedList umgewandelt werden).

Die Person, die das Projekt leitet, ist sich auch nicht sicher, wie sie mit diesem Problem umgehen soll. Gibt es eine Möglichkeit, wie ich meinen Code ändern kann, so dass die Hash-Tabelle immer noch ein Array als zugrunde liegende Datenstruktur mit den Kollisionen in einer LinkedList platziert hat?

    
Tanaki 07.11.2011, 23:49
quelle

3 Antworten

6

Das hat für mich funktioniert:

%Vor%

Zum Beispiel:

%Vor%

Ja, der Konstruktor hat eine Warnung generiert (was die "ungeprüfte" Anmerkung erklärt), aber danach funktioniert der Code ohne weitere Warnungen.

    
Óscar López 08.11.2011, 00:15
quelle
1

Verwenden Sie einfach Object[] als Datenspeicher und wandeln Sie sie manuell in den spezifischen Typ um. Dies ist akzeptabel für den Aufbau von Infrastruktur-Komponenten, bei denen Typ-Relationen schwieriger als üblich sein können.

Dafür lohnt es sich, ein generisches Array in Java zu erstellen:

%Vor%     
irreputable 08.11.2011 01:53
quelle
0

Es ist nicht ideal, aber Sie können so etwas tun:

%Vor%     
Stuart Golodetz 08.11.2011 00:11
quelle