0

我创建了一个 HashMap 来存储一个包含信息列的文本文件。我将键与特定名称进行了比较,并将 HashMap 的值存储到 ArrayList 中。当我尝试使用println我的 ArrayList 时,它只输出最后一个值并忽略与该键匹配的所有其他值。

这不是我的全部代码,只是我在文本文件中读取的两个循环,存储到 HashMap 中,然后存储到 ArrayList 中。我知道这与我的循环有关。

进行了一些编辑并将其输出,但我的所有值都显示了多次。

我的输出看起来像这样。
北美:[安圭拉、安圭拉、安提瓜和巴布达、安提瓜和巴布达、安提瓜和巴布达、阿鲁巴、阿鲁巴、阿鲁巴、

HashMap<String, String> both = new HashMap<String, String>();
    ArrayList<String> sort = new ArrayList<String>();
    //ArrayList<String> sort2 = new ArrayList<String>();



    // We need a try catch block so we can handle any potential IO errors
    try {
    try {
        inputStream = new BufferedReader(new FileReader(filePath));
        String lineContent = null;
    // Loop will iterate over each line within the file.
    // It will stop when no new lines are found.
    while ((lineContent = inputStream.readLine()) != null) {
        String column[]= lineContent.split(","); 
        both.put(column[0], column[1]);


        Set set = both.entrySet(); 
        //Get an iterator 
        Iterator i = set.iterator(); 
        // Display elements 

        while(i.hasNext()) { 
        Map.Entry me = (Map.Entry)i.next();

        if(me.getKey().equals("North America"))
        {   
            String value= (String) me.getValue();
            sort.add(value);

        }

    }


    }
    System.out.println("North America:");
    System.out.println(sort);
    System.out.println("\n");


    }
4

3 回答 3

2

映射键必须是唯一的。您的代码正在按照规范工作。

于 2013-05-25T02:50:44.940 回答
1

如果你需要一个键有很多值,你可以使用

 Map<key,List<T>>

这里 T 是字符串(不仅列出你可以使用任何集合)

于 2013-05-25T03:01:20.323 回答
0

您的代码似乎有些问题:

  • 您正在迭代Map EntrySet以获得一个值(您可以只使用以下代码:

    if (both.containsKey("North America"))
        sort.add(both.get("North America"));
    
  • 似乎您可以在输入文件中多次包含“北美”,但您将其存储在 a 中Map,因此每次在您的 中存储“北美”的新值时Map,它都会覆盖当前值

  • 我不知道类型sort是什么,但是打印的System.out.print(sort);内容取决于这种类型的实现,并且您使用而不是toString()的事实也可能会根据您运行程序的方式产生问题(某些 shell 可能无法打印例如最后一个值)。print()println()

如果您需要更多帮助,您可能希望向我们提供以下内容:

  • 输入文件样本

  • 的声明sort

  • 输出样本

  • 你想得到什么。

于 2013-05-25T03:17:38.830 回答