如何在没有arrayList

时间:2016-05-18 16:27:12

标签: java class object search

我正在开发一个程序,我有大量的对象(元素周期表中的所有元素),要为100多个对象创建一个List会非常痛苦。有没有什么方法可以一次声明和实例化所有对象,并有一个方法读取它们存在的类?例如,如果用户输入“He”,我可以找到保存elementSymbol“He”的相应对象?我必须能够使用getSymbol方法检查每个对象,该方法返回其符号,然后将其与输入进行比较。之后,我计划使用分配给对象的其他字段,例如它的摩尔质量用于计算,但这不会成为问题。如果有另一种方法可以有效地做到这一点,将不胜感激。

4 个答案:

答案 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() + "]";
        }
    }
}