我的arraylist只输出最后一个值

时间:2013-05-25 02:39:09

标签: java string

我创建了一个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");


    }

3 个答案:

答案 0 :(得分:2)

地图键必须是唯一的。您的代码正在按照规范运行。

答案 1 :(得分:1)

如果您需要为密钥设置多个值,则可以使用

 Map<key,List<T>>

这里T是String(不仅列表,你可以使用任何集合)

答案 2 :(得分:0)

您的代码似乎有些问题:

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

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

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

如果您需要更多帮助,可能需要向我们提供以下信息:

  • 输入文件的样本

  • sort

  • 的声明
  • 输出样本

  • 您想要获得的内容。