#java #arrays #design-patterns
#java #массивы #шаблоны проектирования
Вопрос:
Сначала позвольте мне сказать, что я новичок в Java, но не настолько новичок.
Я хочу создать приложение для меню ресторана, используя шаблон итератора. Итак, мой вопрос будет заключаться в том, какой тип массива будет наилучшим для реализации 2D-массива со строковым именем элемента, двойным значением?
Пример
ArrayList<String> menuItems;
public PancakeHouseMenu() {
menuItems = new ArrayList<String>();
addItem("Kamp;B's Pancake Breakfast",5);
String[][] menuItems;
public DinerMenu() {
menuItems = new String[MAX_ITEMS];
addItem("Vegetarian BLT",5);
или я мог бы использовать Hashmaps, если это так, что было бы наиболее эффективным в коде и во время выполнения.
Я ищу представление о более широкой картине использования массивов в приведенном выше сценарии.
Ответ №1:
Это java. Java номинально типизирована. У вас есть концепция? дайте ему имя!
class MenuItem {
String name;
int price; // in cents
}
Затем, если вы хотите иметь список из них для меню, тогда.. у вас есть список из них:
List<MenuItem> items;
все просто.
String[][]
в основном бесполезно; вы не можете представлять цены в строках, да и не хотели бы этого делать, и ваш код превратится в нечитаемый беспорядок. String
поскольку тип является гораздо менее описательным, чем MenuItem
и не дает вам возможности написать весь код, который был бы связан с самими пунктами меню внутри класса MenuItem, которому он принадлежит.
ПРИМЕЧАНИЕ: вам действительно нужны значения toString, equals и hashCode для этого класса MenuItem. Вы можете написать их сами, или заставить свою среду разработки сгенерировать их, или использовать что-то вроде lombok, или, если вы используете java16 и у вас есть функции предварительного просмотра, records.
Ответ №2:
Hashmap будет ли он более эффективным, чем массив в этом случае. Хэш-карты предлагают поиск, вставку и удаление в течение постоянного времени (в среднем).
Реализация будет выглядеть следующим образом
HashMap<String, Double> menu = new HashMap<>();
menu.put("burger", 5.50);
menu.containsKey("burger"); //true
menu.get("burger"); //5.50