有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在没有arrayList的情况下查找对象

我目前正在开发一个程序,其中有大量的对象(元素周期表中的所有元素),如果要为100多个对象创建一个列表,那将是一件非常痛苦的事情。是否有任何方法可以一次性声明和实例化所有对象,并让一个方法读取它们所在的类?例如,如果用户输入“He”,我可以找到包含元素符号“He”的对应对象?我必须能够使用getSymbol方法检查每个对象,该方法返回其符号,然后将其与输入进行比较。在那之后,我计划使用分配给物体的其他场,比如摩尔质量来进行计算,但这不会成为问题。如果有其他有效的方法,我们将不胜感激


共 (4) 个答案

  1. # 1 楼答案

    您应该将所有内容存储到一个Map中,其中elementSymbol作为键,您的object作为值,然后您将能够通过调用map.get(elementSymbol)来访问您的对象

    有关类Maphere的更多详细信息

  2. # 2 楼答案

    由于对象的数量是恒定的,因此最好使用enum管理它们:

    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")
    
  3. # 3 楼答案

    不知道为什么您不喜欢使用ArrayList,它是满足您需求的完全有效的解决方案。考虑到周期表的常量性质,我认为使用枚举是更好的解决方案,但是我添加了这个列表答案,利用streams 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() + "]";
            }
        }
    }
    
  4. # 4 楼答案

    您可以为此使用hashmap

    HashMap<String,PeriodObject> peridicTable = new   HashMap<String,PeriodObject>();
    periodictable.add("he",object);
    periodicTableobject = periodictable.get("he");