2 xiliaoxia xiliaoxia 于 2014.03.29 16:34 提问

Map中一个key不是只对应一个value吗?

java小白对粗体显示代码不解

private String[] names = new String[]{"虎头","弄玉","李清照","李白"};

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
List> listItems = new ArrayList>();
for (int i = 0; i < names.length; i++)
{
Map listItem = new HashMap();
listItem.put("personName", names[i]);
listItems.add(listItem);
}
......

2个回答

KYOxx123
KYOxx123   2014.03.29 23:09

for (int i = 0; i < names.length; i++)
{
Map listItem = new HashMap();
listItem.put("personName", names[i]);
listItems.add(listItem);
}

中,每次for循环创建一个新的Map,与原来的Map无关了,等for循环结束一次释放一次局部变量。

KYOxx123
KYOxx123 把值打印出来:for(Map map:listItems){ System.out.println(map.get("personName")); }
大约 4 年之前 回复
KYOxx123
KYOxx123 现在listItems中包含4个Map对象,假定分别为map1,map2,map3,map4,那么map1的Key值personName对应"虎头",map2的Key值对应"弄玉",依次类推。
大约 4 年之前 回复
xiliaoxia
xiliaoxia 上面有一段不完整的代码应该是:List<Map<String,Object>> listItems = new ArrayList<>(); 那list是不是应该包含{personName,虎头;personName,弄玉;personName,李清照;personName,李白;}呢?如果是这样的话,本来声明的list集合的元素是Map,那personName作为Key到底对应那个值呢?
大约 4 年之前 回复
xiangnan129
xiangnan129   Rxr 2014.03.30 21:21

其实在HashMap并不是我们看到的一个key只对应一个value,如果你的key仅仅只在euqals上相等,而在 == 上为false时,在存储时会将hash值一样的value放在数组的某个位置上,然后在该位置再接一个链表就相当于数组的这个值指向的是这个链表的地址值,然后链表中间可能有多个值。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!