如何组织多个HashMap?

How to organize multiple HashMaps?

你好! 我正在尝试编写一个简单的程序作为我的第一个项目,它可以测试我的英语单词知识。该程序将类似于字典的纸质版本。现在只用我的单词测试单元(object map)来管理程序非常简单明了。


//创建HashMap,它由单词及其翻译后的等价物组成

    HashMap<String, String> map = new HashMap<String, String>();
    map.put("0", "zero");
    map.put("1", "one");
    map.put("2", "two");
    map.put("3", "three");
    map.put("4", "four");
    map.put("5", "five");
    map.put("6", "six");
    map.put("7", "seven");
    map.put("8", "eight");
    map.put("9", "nine");
    map.put("10", "ten");

//用户输入1到100[%]之间的整数,这将决定测试中来自base(HashMap)的词数

    Scanner scanner = new Scanner(System.in);
    double goodAnswers = 0;
    int numberOfQuestions = scanner.nextInt();
    numberOfQuestions *= (double) map.size() / 100;

//创建两个数组,第一个包含来自 HashMap

的所有键
    ArrayList<String> arrayInOrder = new ArrayList<String>(map.keySet());
    ArrayList<String> arrayInDisorder = new ArrayList<String>();

//随机填充第二个数组

    int initialArraySize = arrayInOrder.size();
    for (int i = 0; i < initialArraySize; i++) {
        int j = new Random().nextInt(arrayInOrder.size());
        arrayInDisorder.add(arrayInOrder.get(j));
        arrayInOrder.remove(j);
    }

//输出一个单词(声明次数),等待用户输入翻译后的单词,然后程序将其与hashmap中的值进行比较

    for (int i = 0; i < numberOfQuestions; i++) {
        System.out.println(arrayInDisorder.get(i));
        String input = scanner.next();
        if (input.equals(map.get(arrayInDisorder.get(i)))) {
            goodAnswers++;
        }
    }

//输出最终结果%

    double result = 100 * goodAnswers / numberOfQuestions;
    System.out.println("Wynik: " + String.format("%.2f", result) + "%");

然而,当我想为用户提供一个选项,让他可以选择要测试的单元时,困难就开始了。比方说,现在程序包含3个HashMap。


    HashMap<String, String> map1 = new HashMap<String, String>();
    map1.put("0", "zero");
    map1.put("1", "one");
    map1.put("2", "two");
    map1.put("3", "three");
    map1.put("4", "four");

    HashMap<String, String> map2 = new HashMap<String, String>();
    map2.put("5", "five");
    map2.put("6", "six");
    map2.put("7", "seven");
    map2.put("8", "eight");

    HashMap<String, String> map3 = new HashMap<String, String>();
    map3.put("9", "nine");
    map3.put("10", "ten");

    map2.putAll(map3);
    map1.putAll(map2);

现在只有 3 个 HashMap,我可以使用方法 putAll(),但问题是,在上面的示例中,我合并了所有 HashMap,我想添加到我的程序中的功能是用户可以选择要测试的单位(地图)he/she

例如,如果程序将包含 100 个 Hashmap,并且用户只需在控制台中键入 1, 7, 65,程序就会知道,它必须将第 1、第 7 和第 65 个 HashMap 合并成一个更大的 HashMap,它将用作其 'main' map 来测试用户的知识。

总而言之,我想知道如何将用户选择的这些 HashMap 合并为一个(这样我的程序就可以使用它),当 he/she 键入它们时(HashMaps ' 名称)进入控制台。

问题出现在这里:map1

您有 多于 个对象。当你开始给它们起 map1、map2 等名称时,你就是在把自己束缚在这些变量上。

要改用的概念:数组,分别 List/ArrayList。

仅此而已。

多亏你我想起了 Arrays 可以包含其他对象,例如 HashMaps,所以我想到了这个:


    ArrayList<HashMap> motherArray = new ArrayList<HashMap>();

    motherArray.add(map1);
    motherArray.add(map2);
    motherArray.add(map3);

//要求用户选择单位数量

    Scanner scanner = new Scanner(System.in);
    System.out.println("How many maps do you want to include in your test?");
    int numberOfMaps = scanner.nextInt();

//创建HashMap,它将包含用户从之前创建的Array中选择的所有HashMap

    HashMap<String, String> motherMap = new HashMap<String, String>();

    for (int i = 0; i < numberOfMaps; i++) {
        System.out.println("What are their numbers (indexes)?");
        int indexOfMap = scanner.nextInt();
        motherMap.putAll(motherArray.get(i));
    }

我不确定这是否正是您想要指出的,但即使我决定扩展或增加这些地图的数量,这个解决方案对我来说似乎也很有效。

非常感谢您的指点!