我正在开发一个程序,我有大量的对象(元素周期表中的所有元素),要为100多个对象创建一个List会非常痛苦。有没有什么方法可以一次声明和实例化所有对象,并有一个方法读取它们存在的类?例如,如果用户输入“He”,我可以找到保存elementSymbol“He”的相应对象?我必须能够使用getSymbol方法检查每个对象,该方法返回其符号,然后将其与输入进行比较。之后,我计划使用分配给对象的其他字段,例如它的摩尔质量用于计算,但这不会成为问题。如果有另一种方法可以有效地做到这一点,将不胜感激。
答案 0 :(得分:3)
您应该将所有内容存储到Map
,其中elementSymbol
为关键字,object
为值,然后您可以通过调用map.get(elementSymbol)
来访问您的对象
有关课程Map
here
答案 1 :(得分:3)
由于您拥有恒定数量的对象,最好使用枚举来管理它们:
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;
}
得到:
Elements.valueOf("he")
答案 2 :(得分:1)
您可以使用hashmap
。
HashMap<String,PeriodObject> peridicTable = new HashMap<String,PeriodObject>();
periodictable.add("he",object);
periodicTableobject = periodictable.get("he");
答案 3 :(得分:0)
不确定为什么您反对使用ArrayList,它是一个完全有效的解决方案。我认为鉴于周期表的恒定性,使用Enum是更好的解决方案,但是我添加了这个List答案,利用流API来实现完整性。
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() + "]";
}
}
}