Ich arbeite gerade an einem Programm, wo ich eine große Menge von Objekten habe (alle Elemente aus dem Periodensystem) und es wäre ein großer Schmerz, eine Liste erstellen zu müssen über 100 Objekte. Gibt es eine Möglichkeit, alle Objekte einmal zu deklarieren und zu instantiieren und eine Methode zu haben, die die Klasse liest, in der sie existieren? Wenn ein Benutzer beispielsweise "He" eingibt, kann ich das entsprechende Objekt finden, das das Element "Symbol" "He" enthält. Ich müsste in der Lage sein, jedes Objekt mit der Methode getSymbol zu überprüfen, die ihr Symbol zurückgibt und es dann mit der Eingabe vergleicht. Danach plane ich, andere dem Objekt zugewiesene Felder zu verwenden, so wie es die molare Masse für Berechnungen ist, aber das wird kein Problem sein. Wenn es einen anderen Weg gibt, dies effektiv zu tun, wäre dies sehr zu begrüßen.Wie finde ich ein Objekt ohne eine ArrayList
Antwort
Sie sollten alles in ein Map
mit den elementSymbol
als Schlüssel und Ihrem object
als Wert speichern, dann werden Sie in der Lage sein, durch map.get(elementSymbol)
Aufruf zu Ihrem Objekt zuzugreifen.
Weitere Details über die Klasse Map
here
können Sie eine hashmap
für diese.
HashMap<String,PeriodObject> peridicTable = new HashMap<String,PeriodObject>();
periodictable.add("he",object);
periodicTableobject = periodictable.get("he");
Wie Sie konstante Anzahl von Objekten, ist es besser, sie mit ENUM verwalten:
public enum Elements {
ag(10), //10 here is the molarMass constructor parameter
he(20);
//constructor if needed
Elements(int molarMass) {
this.molarMass = molarMass;
}
//extra fields
final private int molarMass;
}
get:
Elements.valueOf("he")
Wie könnte ich in der Lage sein, diese Klasse zu durchsuchen oder jedes Enum gegen eine Eingabe zu überprüfen? Ich bin nicht sehr vertraut mit enums –
Element he = Element.valueOf ("er");/* "he" seine Eingabezeichenfolge */ int m = he.getMolarMass(); – Vovka
nicht sicher, warum Sie abgeneigt sind ein zu verwenden ArrayList ist eine perfekte Lösung für Ihre Anforderungen. Ich denke, die Verwendung einer Enumeration ist die bessere Lösung angesichts der konstanten Natur des Periodensystems, aber ich füge diese List-Antwort hinzu, indem ich die Stream-API der Vollständigkeit halber verwende.
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
Test test = new Test();
test.run();
}
private void run() {
List<Element> elements = new ArrayList<>();
Element oxygen = new Element("O", "Oxygen");
Element carbon = new Element("C", "Carbon");
Element hydrogen = new Element("H", "Hydrogen");
Element helium = new Element("He", "Helium");
elements.add(oxygen);
elements.add(carbon);
elements.add(hydrogen);
elements.add(helium);
System.out.println("All Elements:");
for (Element element : elements) {
System.out.println("\t" + element);
}
System.out.println();
Element oxy = elements.stream().filter(e -> e.getId().equals("He")).findFirst().get();
System.out.println("Specific Element: " + oxy);
}
private class Element {
private final String id;
private final String name;
public Element(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return this.id;
}
public String getName() {
return this.name;
}
@Override
public String toString() {
return this.getName() + " [" + this.getId() + "]";
}
}
}
Es war mühsam genug, jedes Element manuell eingeben zu müssen, und ich dachte mir, dass es einen effizienteren Weg geben musste, um auf sie zuzugreifen. Ich wollte wirklich nicht zurück gehen und list.add() über 100 Mal machen. Ich bin mir sicher, dass es eine bessere Möglichkeit gibt, das mit einer Liste zu tun, aber die Verwendung einer Enum, um sie zu halten, hat viel besser funktioniert –
- 1. LD_LIBRARY_PATH: Wie finde ich ein gemeinsames Objekt
- 2. Wie finde ich ein Objekt in flex/actionscript 3?
- 3. Wie finde ich ein Objekt mit einem fehlenden Label?
- 4. Wie finde ich heraus, ob ein Objekt gesperrt ist? C#
- 5. Wie finde ich heraus, welche Nachrichten ein Objekt versteht?
- 6. Wie finde ich ein Objekt mit Namen in Pyqt?
- 7. Wie finde ich ein Array-Objekt nach gegebenen Informationen?
- 8. Wie mische ich eine ArrayList?
- 9. wie finde ich nummer die nicht in einer arraylist sind?
- 10. Wie mache ich eine Arraylist public
- 11. eine Arraylist von einem Objekt JSON Erstellen
- 12. Wie binde ich eine ArrayList an ein PreparedStatement in Oracle?
- 13. Wie gebe ich Parameter für eine ArrayList in BlueJ ein?
- 14. Vergleichen Sie Objekt ArrayList mit String ArrayList
- 15. Entfernen Arraylist-Objekt Ausgabe
- 16. Arraylist in parcelable Objekt
- 17. Wie Sie ein Objekt aus der Arraylist in C# abrufen
- 18. Wie kann ich überprüfen, ob eine ArrayList ein Element einer anderen ArrayList enthält?
- 19. Wie finde ich eine eindeutige ID für ein Android-Gerät?
- 20. Wie man Objekt/Struktur in Arraylist wirft?
- 21. Wie blase ich eine Arraylist in Java?
- 22. Wie deklariere ich eine 2D-String-Arraylist?
- 23. Wie kann ich ein bestimmtes Objekt aus einer ArrayList entfernen und wie kann ich überprüfen, ob es dieses Objekt enthält?
- 24. Wie finde ich ein Word-Anwendungsfenster?
- 25. Wie finde ich ein Speicherleck für mod_perl?
- 26. Wie konvertiert man ein Array in eine ArrayList?
- 27. Wie finde ich ein Objekt in opencv und ersetze das durch ein neues Bild in Android?
- 28. Wie finde ich ein Anmerkungshandle in MATLAB?
- 29. Ich finde einen Pfad ohne den Dateinamen
- 30. Zugriffsmethode in Objekt von Arraylist
Warum möchten Sie nicht ArrayList verwenden? Für mich klingt das nach dem perfekten Anwendungsfall dafür. – moscar
@moscar Genau das, was ich auch dachte. Fügen Sie einfach die Elementklassen zu einer Array-Liste hinzu und verwenden Sie Lambda, um basierend auf der ID des Elements auszuwählen, was erforderlich ist. – ManoDestra
Dieser Typ hat es auch mit enums getan: https://gist.github.com/felixdivo/11159677. Dies ist, was @Vovka in seiner Antwort unten vorgeschlagen hat. Ein Enum ist eine elegante Lösung für diese Anforderung angesichts der konstanten Natur des Periodensystems. – ManoDestra