哈希表显示问题

8
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();
        }       
    }
}

你好!

我创建了一个哈希映射,其中包含超市中的产品信息。然而,我不能正确地显示我的键值(它是一个数组)。除了产品名称之外,它向我展示了无关的东西。我该如何纠正这个问题?


float loadFactor = keyboard.nextFloat(); hMap = new HashMap <Integer[], String> (initialCapacity, loadFactor); 中,是否有笔误?这意味着 loadFactorfloat 类型,但你的哈希图存储了 String 类型? - Azat Nugusbayev
@ Azat Nugusbayev 这与哈希表结构有关。 - lzxcl
2个回答

5
static HashMap <Integer[], String> hMap;
HashMap 中不适合使用数组作为键,因为两个不同的数组实例具有完全相同的元素时,将被视为不同的键。这种行为是由于数组未覆盖 Objectequals 方法所导致的,因此只有当 arr1==arr2 时,两个数组 arr1arr2 才相等。
打印键不是你的主要问题。可以通过使用 Arrays.toString 来打印数组键来轻松解决此问题。
我建议你将你的 HashMap 改为 HashMap<List<Integer>, String>

1

我同意Eran的回答,你不应该选择整数数组作为密钥,但我认为使用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");
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接