In meiner Anwendung habe ich kleine Tabellen (Dateien) mit eindeutigen Schlüsseln (die meisten von ihnen haben zwei oder mehr Felder - komponierte Schlüssel). Ich möchte eine Klasse für jede dieser kleinen Tabellen erstellen und die Daten in eine Java-Sammlung laden. Dieses Objekt liest die Datei und lädt die Daten in eine Java-Sammlung. Ich möchte dann die Daten aus dieser Sammlung mit den Schlüsselwerten abholen, um auf alle Felder zugreifen zu können. Meine Frage ist, welche Sammlung ich verwenden oder sagen soll, welche Sammlung mehrere Schlüssel unterstützt? Ein Link zu einem Examen ist großartig. Danke im Voraus!Welche Java-Sammlung eignet sich am besten für dieses Szenario
Antwort
Nicht ganz sicher, was Sie durch mehrere Schlüssel bedeuten. Eine Klasse pro 'Tabelle', die Sie in einer Sammlung speichern und mit einem Schlüssel/Wert-Paar abrufen können, sagt mir HashMap.
user181533 - Das stimmt auch. Eine HashMap pro Tabelle, wobei key eine Kombination aus zwei Feldern ist. Also wird das so funktionieren: Abfrage auf Tabelle, um alle Zeilen (Objekte) zu erhalten und eine Querylist und dann eine Liste aus QueryList zu erstellen. Dann iteriere auf List, um eine HashMap zu erstellen, richtig? So kann das alles im Konstruktor gemacht werden.Erstellen Sie anschließend eine Methode, die Argumente für den Schlüssel übernimmt und das Tabellenobjekt aus HasMap zurückgibt. Da ich neu hier bin, korrigiere mich bitte, wenn mein Verständnis nicht stimmt. Danke, – Peter
user181533 Ich gehe mit Ihrer Antwort und natürlich wer auch immer HashMap vorgeschlagen hat, aber Sie möchten bestätigen, wenn mein Ansatz zum Erstellen und Abrufen der HashMap korrekt ist. Danke @Louis – Peter
Angenommen, ich Ihre Frage richtig gelesen habe (es gibt einige Unklarheiten über „mehrere Schlüssel“), was um Sie wollen selbst eine Klasse für den Schlüssel zu definieren, die mehrere Felder enthält und implementiert equals()
und hashCode()
in einer solchen Art und Weise, dass die Objekte können als HashMap
Schlüssel verwendet werden.
Hier ist ein sehr einfaches Skelett-Implementierung (nicht getestet, einige Fehlerbehandlung weggelassen):
public class MyKey
{
private String part1 = null;
private Integer part2 = null;
public MyKey(String part1, int part2)
{
this.part1 = part1;
this.part2 = part2;
}
@Override
public boolean equals(Object o)
{
if (o == null || !(o instanceof MyKey)) return false;
return this.part1.equals(((MyKey)o).part1) && this.part2.equals(((MyKey)o).part2);
}
@Override
public int hashCode()
{
return this.part1.hashCode() + this.part2.hashCode();
}
}
Danke JIm. Was ich dachte, um eine Objektliste zu erstellen, in der die gesamte Tabelle in die Liste geladen wird. Erstellen Sie dann eine Getter-Methode, die FLD1 und FLD2 als Argumente akzeptiert und das Objekt zurückgibt, in dem FLD1 und FLD2 auf das Objekt in der Liste passen. Einfacher Iterator oder For-Schleife über die Liste. Aber ich bin mir nicht sicher, ob dies der richtige Weg ist. – Peter
Jim, Wenn ich eine Klasse erstellen, die eine Abfrage für eine Datei ausführt und die Daten (alle Objekte) in eine Liste lädt. Die Klasse wird über eine Methode verfügen, die FLD1 und FLD2 als Argument akzeptiert und die übereinstimmende Entität (Objekt) zurückgibt. Auf diese Weise werden die Daten bei jedem Erstellen einer Instanz dieser Klasse in eine Liste geladen. Ich denke immer wieder über diese Liste nach, da ich damit vertraut bin. Ist das der richtige Weg, etwas anderes zu tun oder zu tun? Ich bin jsut neu zu Java, deshalb wollen Sie sicherstellen. Vielen Dank. Peter @JimGarrison – Peter
Eine Hashtable würde wahrscheinlich am besten funktionieren, um den Inhalt jeder Tabelle zu speichern. Eine Hashtabelle erlaubt es Ihnen grundsätzlich, beliebig viele Objekte hinzuzufügen, und jede hat einen eindeutigen Schlüssel.
Mein Vorschlag wäre, für jede Tabelle Datei zu tun. In meinem Beispiel gehe ich davon aus, dass Sie jede Zeile der Tabelle Datei in ein Objekt lesen Eintrag namens ...
// Create a new Hashtable, where the contents will be a String (the unique key) and an "Entry" object for the table row of data
Hashtable<String,Entry> entriesTable = new Hashtable<String,Entry>();
for (each line in your table file){
// Generate the unique value for this row. If there are multiple columns that make up the key,
// just join them together into a single String
String key = uniqueColumn1 + uniqueColumn2 + ...;
// Create an object for your row, if you dont have one already.
Entry row = new Entry(line);
// Add the entry to the Hashtable
entriesTable.put(key,row);
}
Wenn Sie eine Zeile aus der Tabelle erhalten möchten, fragen Sie es durch seinen einzigartigen Wert ...
Entry entry = entriesTable.get(uniqueColumn1 + uniqueColumn2 + ...);
Sie können so viele Objekte hinzufügen, wie Sie möchten, vorausgesetzt, sie haben jeweils einen eindeutigen Schlüssel. Die Hashtable unterstützt das Hinzufügen und Entfernen von Werten usw., so dass es ziemlich einfach ist, damit zu arbeiten.
Sie können auch eine Hashtable in ein Array konvertieren, wenn Sie möchten, und Sie können einen Enumerator erhalten, um über jeden Eintrag zu gehen, wenn Sie den gesamten Inhalt der Hashtable abrufen müssen.
Danke, werde damit gehen. Im Grunde werde ich meine Tabelle von Mainframe über Abfrage lesen, eine Abfrageliste erstellen und dann von Querylist Hashtable für jede Entität erstellen. Danke noch einmal! – Peter
Warum verwenden Sie möglicherweise eine 'Hashtable' anstelle von' HashMap' und 'Iterator'? Dies ist nicht Java 1.2. –
- 1. Welche Datenbank-Engine eignet sich am besten für node.js-Apps?
- 2. Für welche Aufgaben eignet sich F # am besten?
- 3. Welche Systemkonfiguration eignet sich am besten für die iPhone-Anwendungsentwicklung?
- 4. Welches Diagrammsystem eignet sich am besten für Speicherübergangsgraphen mit Gewichten?
- 5. Welcher SchemaTyp in Mongoose eignet sich am besten für Timestamp?
- 6. Welche Konfiguration von IDE/Editoren/Plugin eignet sich am besten für die Entwicklung von Laszlo-Anwendungen?
- 7. Welche Datenstruktur eignet sich am besten für die Implementierung eines 2-D-Arrays in Java?
- 8. Welche Distribution eignet sich am besten für LAMP + memcache? (Antwort bekommt eine Linode oder Slicehost Empfehlung)
- 9. Welche SOA-Architektur eignet sich am besten für eine Java-Anwendung?
- 10. Welche Datenstruktur eignet sich am besten für verschachtelte Werte und Anzahl der Werte?
- 11. Welche NoSQL-Datenbank eignet sich am besten zum Anhängen von Audit Logging?
- 12. Für welche Dinge eignet sich Mono nicht?
- 13. Ruby, welche Ausnahme eignet sich am besten zur Verarbeitung nicht gesetzter Umgebungsvariablen?
- 14. Welches Werkzeug für die kontinuierliche Integration eignet sich am besten für ein C++ - Projekt?
- 15. Welcher Verschlüsselungsalgorithmus eignet sich am besten zum Verschlüsseln der Sitzungsdatei auf dem Server?
- 16. Welche Linux-Distribution eignet sich am besten für die Entwicklung einer Mono-Anwendung in einer virtuellen Maschine?
- 17. Welcher Ansatz eignet sich am besten für die Integration von Lotus Notes-Anwendungen?
- 18. Welcher STL-Container eignet sich am besten für std :: sort? (Ist es überhaupt wichtig?)
- 19. Welcher MySQL-Typ eignet sich am besten für die Spalte "Preis"?
- 20. Welcher Cluster-Algorithmus eignet sich am besten für das Clustering eindimensionaler Features?
- 21. Welche Java-Sammlung eignet sich am besten zum Speichern und Bearbeiten von Integer-Daten aus einer Tabelle?
- 22. Welche Java-API-Datenstruktur eignet sich für HTML-Bäume?
- 23. Grails - Lift: Welches Framework eignet sich besser für welche Anwendungen?
- 24. Welche Beziehung wird dieses Szenario haben?
- 25. Welcher Ansatz eignet sich am besten, um einen benutzerdefinierten Tab-Controller zu erstellen?
- 26. , welche Art von Tests ist für dieses Szenario
- 27. Sortieralgorithmus für dieses spezifische Szenario verwenden
- 28. C#: Welcher Haken eignet sich am besten, um globale Tastenkombinationen mit mehreren Tasten zu überwachen?
- 29. Welche Datenstruktur funktioniert am besten für 2 verbundene Listen?
- 30. Welches ist am besten für einen sich wiederholenden Code?
Nicht ganz sicher, was Sie mit mehreren Schlüsseln meinen. Können Sie ein Beispiel geben? –
Zum Beispiel enthält ein Datensatz zehn Felder, aber die ersten beiden Felder, sagen Fld1 und Fld2 machen diesen Datensatz einzigartig. Um also den Datensatz aus der Java-Sammlung zu speichern und zu ziehen, sollten diese beiden Schlüsselfelder übereinstimmen. Wie Abfrage wo xyz.FLD1 = "AA" und xyz.FLD2 = "123". – Peter