import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class mainClass
{
    static Scanner keyboard = new Scanner(System.in);
    static HashMap <Integer[], String> hMap;

    public static void createAHashMap()
    {
        System.out.print("Express the initial capacity: ");
        int initialCapacity = keyboard.nextInt();
        System.out.print("Express the load factor: ");
        float loadFactor = keyboard.nextFloat();
        hMap = new HashMap <Integer[], String> (initialCapacity, loadFactor);       
    }

    public static void insertProductInformations()
    {
        Integer values[] = new Integer[3];
        System.out.print("\nEnter product's barcode number: ");
        values[0] = keyboard.nextInt();
        System.out.print("Enter product's name: ");
        String productName = keyboard.next();   
        System.out.print("Enter product's amount: ");
        values[1] = keyboard.nextInt();
        System.out.print("Enter product's price: ");
        values[2] = keyboard.nextInt(); 
        hMap.put(values, productName);
    }

    public static void displayList()
    {
        Set set = hMap.entrySet();
        Iterator iterator = set.iterator();
        System.out.println("\nBarcode Number\tProduct Amount\tProduct Price\tProduct Name");        
        while (iterator.hasNext()) 
        {
            Map.Entry mEntry = (Map.Entry) iterator.next();
            System.out.print(mEntry.getKey() + "\t\t" + mEntry.getValue() + "\n");
        }
    }

    public static void main(String[] args)
    {
        createAHashMap();
        System.out.print("\nEnter to add product '1'\n");
        System.out.print("Enter to display products '2'\n");
        System.out.print("Enter your choice: ");
        int entry = keyboard.nextInt();     
        while (entry != -99)
        {
            if (entry == 1)
            {
                insertProductInformations();
            }
            if (entry == 2)
            {
                displayList();
            }
            System.out.print("\nExpress your new choice (Exit: -99): ");
            entry = keyboard.nextInt();
        }       
    }
}

Здравствуй!

Я создал хэш-карту, которая содержит информацию о продуктах в супермаркете. Однако я не могу правильно отображать свои ключевые значения (которые представляют собой массив). Он показывает мне не относящиеся к делу вещи, кроме названия продукта. Как я могу это исправить?

8
lzxcl 27 Дек 2015 в 10:20

2 ответа

Лучший ответ
static HashMap <Integer[], String> hMap;

Массив не подходит в качестве ключа в HashMap, поскольку два разных экземпляра массива, имеющие одинаковые элементы, будут считаться разными ключами. Такое поведение является результатом того факта, что массивы не переопределяют метод equals Object, поэтому два массива arr1 и arr2 равны, только если arr1==arr2.

Печать ключей - не ваша главная проблема. Эту проблему легко решить, используя Arrays.toString для печати ключа массива.

Предлагаю вам сменить HashMap на HashMap<List<Integer>, String>.

5
Eran 27 Дек 2015 в 07:23

Я согласен с ответом Эрана о том, что вы не должны выбирать свой ключ в качестве массива Integer, но я думаю, что ваша проблема отображения не будет полностью решена с помощью Arrays.toString, поскольку он предоставит массив в указанном формате, а не в том, который вам нужен. Вам необходимо явно отформатировать данные в соответствии с вашими требованиями. Пример модификации дисплея из приведенного выше примера может быть: -

public static void displayList()
{
    Set set = hMap.entrySet();
    Iterator iterator = set.iterator();
    System.out.println("\nBarcode Number\tProduct Amount\tProduct Price\tProduct Name");        
    while (iterator.hasNext()) 
    {
        Map.Entry mEntry = (Map.Entry) iterator.next();
        Integer[] values = (Integer[]) mEntry.getKey();
        System.out.print(values[0] + "\t" + values[1] + "\t" + values[2] + "\t" + mEntry.getValue() + "\n");
    }
}
1
Siddharth 27 Дек 2015 в 08:36