我创建了一个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");
}
答案 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
输出样本
您想要获得的内容。