В настоящее время я работаю над программой, в которой у меня есть большое количество объектов (все элементы из периодической таблицы), и было бы огромной болью создать список для более 100 объектов. Есть ли способ, который я могу объявить и создать экземпляр всех объектов один раз и иметь способ читать класс, в котором они существуют? Например, если пользователь вводит «Он», я могу найти соответствующий объект, который содержит элемент «Символ» «Он»? Я должен был бы иметь возможность проверять каждый объект, используя метод getSymbol, который возвращает свой символ, а затем сравнивает его со входом. После этого я планирую использовать другие поля, назначенные объекту, такие как молярная масса для вычислений, но это не будет проблемой. Если есть другой способ эффективно сделать это, мы будем очень благодарны.Как найти объект без arrayList
ответ
Вы должны хранить все в Map
с elementSymbol
как ключ и ваш object
в качестве значения, то вы сможете получить доступ к объекту по телефону map.get(elementSymbol)
.
Подробнее о классе Map
here
вы можете использовать hashmap
для этого.
HashMap<String,PeriodObject> peridicTable = new HashMap<String,PeriodObject>();
periodictable.add("he",object);
periodicTableobject = periodictable.get("he");
Как у вас есть постоянное количество объектов, то лучше управлять их перечисления:
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")
Как бы я смог найти этот класс или проверить каждое перечисление на вход? Я не очень хорошо знаком с перечислениями –
Элемент he = Element.valueOf ("he");/* "he" его строка ввода */ int m = he.getMolarMass(); – Vovka
Не знаю, почему вы непрочь используя 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() + "]";
}
}
}
Было достаточно утомительно, чтобы вручную вводить каждый элемент, и я решил, что должен быть более эффективный способ доступа к ним. Я действительно не хотел возвращаться и делать list.add() более 100 раз. Я уверен, что есть лучший способ сделать это со списком, но с использованием перечисления, чтобы они работали намного лучше –
- 1. Невозможно найти объект ArrayList
- 2. Найти объект внутри ArrayList Java
- 3. Не найти объект в ArrayList
- 4. Как найти объект в ArrayList по недвижимости
- 5. Как найти индекс arraylist в arraylist?
- 6. Найти объект в ArrayList и удалить его
- 7. Не удается найти объект в ArrayList
- 8. Добавить объект в ArrayList без overwritting он
- 9. Как добавить объект в ArrayList
- 10. Как передать объект ArrayList методу?
- 11. Как удалить объект из ArrayList?
- 12. Как бросить объект в ArrayList
- 13. Как добавить объект в ArrayList?
- 14. Как удалить объект из arraylist
- 15. ArrayList, используя объект как тип
- 16. Как найти элемент в arraylist?
- 17. Как найти общие элементы ArrayList?
- 18. Как найти значение в arraylist
- 19. Как найти дубликаты в arrayList?
- 20. как найти дубликатов в arraylist
- 21. Сортировка конкретный объект ArrayList
- 22. Как перетасовать ArrayList без коллекций
- 23. Найти, если объект в ArrayList имеет определенное поле
- 24. Объект String объекту ArrayList
- 25. Объект сортировки ArrayList
- 26. Найти конкретный объект по определенной координате в ArrayList
- 27. Поиск через объект ArrayList
- 28. удалите объект из ArrayList
- 29. Как скопировать объект из java ArrayList?
- 30. получить конкретный объект в arrayList
Почему вы не хотите использовать ArrayList? Для меня это звучит как идеальный вариант использования. – moscar
@moscar Точно, что я тоже думал. Просто добавьте классы элементов в список массивов и используйте lambda для выбора того, что требуется на основе идентификатора элемента. – ManoDestra
Этот парень также сделал это с перечислениями: https://gist.github.com/felixdivo/11159677. Вот что сказал В. Вовка в своем ответе ниже. Перечисление является элегантным решением для этого требования, учитывая постоянный характер периодической таблицы. – ManoDestra