наилучший тип массива для использования шаблона итератора

#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