黑马程序员技术交流社区
标题:
map集合问题
[打印本页]
作者:
\(^o^)/
时间:
2014-4-26 15:27
标题:
map集合问题
本帖最后由 \(^o^)/ 于 2014-4-26 22:02 编辑
<P>
import java.util.*;
class test
{
public static void main(String[] args)
{
Map<String,String> map=new HashMap<String,String>();
map.put("1","zhangsan1");
map.put("4","zhangsan4");
map.put("2","zhangsan2");
map.put("3","zhangsan3");
Set<String> keySet=map.keySet();
Iterator<String> it=keySet.iterator();
while(it.hasNext())
{
String key=it.next();
String value=map.get(key);
System.out.println(key+",,,,"+value);
}
}</P>
<P>}
</P>
复制代码
上面运行结果为:3、、、zhangsan3
2、、、zhangsan2
1、、、zhangsan1
4、、、zhangsan4
当我把while循环体中的句子
String key=it.next();
String value=map.get(key);
System.out.println(key+",,,,"+value);
变成
System.out.println(it.next()+",,,,"+map.get(it.next()));
结果为:
3、、、zhangsan2
1、、、zhangsan4
为什么?
作者:
水竹
时间:
2014-4-26 16:05
跟自增运算有点像,你本来循环一次只执行一次it.next(),但是改了之后循环一次就执行两次了,结果四次的任务两次就执行完了。
作者:
程序爱好者
时间:
2014-4-26 16:06
在迭代时循环中next调用一次,就需要hasNext判断一次。
而你这句:System.out.println(it.next()+",,,,"+map.get(it.next()));//it.next() //map.get(it.next()) 调用了两次
执行一句换一行 所以
3、、、zhangsan3
2、、、zhangsan2
1、、、zhangsan1
4、、、zhangsan4
执行完3、、、遇到了next()就换了一行 然后执行第二行的zhangsan2又换了一行....
所以上结果是 3、、、zhangsan2
1、、、zhangsan4
作者:
eternallove
时间:
2014-4-26 16:42
System.out.println(it.next()+",,,,"+map.get(it.next()));
没执行一次it.next(),就会得到一个key值,这个输出语句中有两个it.next(),所以它一次while循环就会得到两个key值,第一个key值当然是直接打印了就是3,第二个key值应该是2 ,但它在map.get()方法中当然直接回输出其key值所对应的value值了,就是zhangsan2 。之后输出的原理相同。。。
作者:
小马初长成
时间:
2014-4-26 20:30
楼主这个地方错了
上面运行结果为:3、、、zhangsan3
2、、、zhangsan2
4、、、zhangsan4
1、、、zhangsan1
改变后
变成
System.out.println(it.next()+",,,,"+map.get(it.next());
输出的结果是: 2,,,,zhangsan3
1,,,,zhangsan4
首先HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next;
Entry类里面有一个next属性,作用是指向下一个Entry。 第一个键值3对zhangsan3进来,通过计算其key的hash得到的index=0,记做:Entry[0] = zhangsan3; 所以不难理解将key改成it.next后,得到index[1]记为Entry[1]=zhangsan3
作者:
\(^o^)/
时间:
2014-4-26 22:02
明白了,谢谢大家。。。
作者:
fendoubuxi
时间:
2014-4-30 00:34
之前我对这个it.next()也是好奇试验了下~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2