我有一个列表gotitems
。
ArrayList<String> gotitems = new ArrayList<String>();
我需要将该列表放在名为map
的散列图中。
Map<String,String> map = new HashMap<String,String>();
我试过这个:
for(String s:gotitems){
map.put("a",s);
}
gotitems包含:
First
Second
Third
但输出:
System.out.println(map.values());
给出:
Third
Third
Third
我甚至试过这个:
for(String s:gotitems){
for(int j=0;j<gotitems.size();j++){
map.put("a"+j,s);
}
}
但这也行不通。
我在这里做错了什么?
答案 0 :(得分:2)
将指定的值与此映射中的指定键相关联(可选操作)。如果映射先前包含键的映射,则旧值将替换为指定的值。
每次在这里,你都会忘记密钥。
for(String s:gotitems){
map.put("a",s);
}
每次更改密钥并尝试
for(String s:gotitems){
map.put(s,s);
}
答案 1 :(得分:0)
这是因为您将地图中的所有项目放在相同的键“a”
上map.put("a");
您需要针对唯一键存储每个元素,因此请添加以下内容:
int count = 0;
for(String s:gotitems){
map.put("a" + count,s);
count++;
}
答案 2 :(得分:0)
您正尝试在同一个键"a"
下的地图中放置三个字符串。尝试使用唯一键来表示您的价值观。
答案 3 :(得分:0)
您将所有商品都放在Map
中并使用相同的键:“a”。
每个值都应该有一个唯一的String
键。
例如:
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
Map<String, String> map = new LinkedHashMap<String, String>();
for (String s: list) {
map.put(s, s);
}
System.out.println(map);
输出:
{one=one, two=two, three=three}
请注意LinkedHashMap
:它维护您放置键/值对的顺序。
修改当然,如果您的List
没有唯一值,则将其值作为Map
的键移动将覆盖部分Map
值。在这种情况下,您希望首先确保List
具有唯一键,或者使用Map<Integer, String>
的{{1}}值作为List
的键,Map
,以及实际List
值作为Map
的值。
答案 4 :(得分:0)
写作时
for(String s:gotitems){
map.put("a",s);
}
您将根据键“a”删除地图中的任何现有条目。因此,在迭代之后,您的地图将只包含一个与gotitems
中最后一个迭代值对应的条目。
要有效地使用地图,您需要考虑您的密钥是什么。然后使用map.put(myKeyForThisItem, s)
代替。如果您没有有效的密钥方案,那么使用地图是没有意义的,因为人们倾向于使用密钥来提取相应的值。
至于你的第二种方法,如果你能够更清楚地定义“它不工作”会更有帮助:可能会遍历地图并打印键和值。
答案 5 :(得分:0)
请注意,在地图中,键最多可以指向一个值。在您的情况下,您正在执行以下映射:
“a” - &gt; “一”
然后你把它覆盖为
“a” - &gt; “二”
然后你把它覆盖为
“a” - &gt; “三”
记住:一个键最多可以指向一个值。但是,可以通过多个键指向一个值。
答案 6 :(得分:0)
这是错误的:
for(String s:gotitems){
map.put("a",s);
}
由于您对所有值使用"a"
公共密钥,因此将保留最后插入的键值对,并覆盖所有先前的键值。
这也不正确:
for(String s:gotitems){
for(int j=0;j<gotitems.size();j++){
map.put("a"+j,s);
}
}
你要在地图上放n * n次,尽管你只想要n(gotitems.size()
)个项目进入地图。
首先确定要在地图中使用的密钥,将List
复制到Map
一种方法可以使用索引key
:
for(int j=0;j<gotitems.size();j++){
map.put("KEY-"+j,gotitems.get(j));
}
输出应为:
KEY-0首先
KEY-1 Second
KEY-2第三
答案 7 :(得分:0)
我已经重现了你的代码。问题是您将相同的键分配给不同的值。这应该有用。
import java.util.*;
public class testCollection{
public static void main(String[] args){
ArrayList<String> gotitems = new ArrayList<String>();
gotitems.add("First");
gotitems.add("Second");
gotitems.add("Third");
Map<String,String> map = new HashMap<String,String>();
String x = "a";
int i = 1;
for(String s:gotitems){
map.put(x+i,s);
i++;
}
System.out.println(map);
}
}