黑马程序员技术交流社区
标题:
map 的迭代问题 求解
[打印本页]
作者:
宗士为
时间:
2012-5-10 11:13
标题:
map 的迭代问题 求解
public class MapDemo {
public static void main(String[] args) {
demo2();
}
private static void demo2() {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("张三", 85);
map.put("李四", 88);
map.put("王五", 80);
map.put("赵六", 80);
Set<String> set = map.keySet();
for(Iterator<String> iter = set.iterator(); iter.hasNext();)
System.out.println(iter.next() + map.get(iter.next()));
}
为什么结果不是以下
赵六 : 80
张三 : 85
李四 : 88
王五 : 80
而只打印两个
赵六85
李四80
作者:
周素强
时间:
2012-5-10 11:41
本帖最后由 周素强 于 2012-5-10 12:04 编辑
我看你的意思是想用高级For,所以我给你改了一下看一下吧:
import java.util.*;
public class MapDemo
{
public static void main(String[] args)
{
demo2();
}
private static void demo2()
{
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("张三", 85);
map.put("李四", 88);
map.put("王五", 80);
map.put("赵六", 80);
Set<String> set = map.keySet();
//Iterator<String> iter = set.iterator();
for(String s : set)
System.out.println(s + map.get(s));
}
}
用迭代器帮你改一下,有个地方你写错了,看代码吧:
private static void demo2()
{
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("张三", 85);
map.put("李四", 88);
map.put("王五", 80);
map.put("赵六", 89);
Set<String> set = map.keySet();
Iterator<String> iter = set.iterator();
while(iter.hasNext())
{
String s = iter.next();
//System.out.println(iter.next() + map.get(iter.next())); //这里你调用了两次iter.next()
System.out.println(s + map.get(s));
}
}
作者:
李啸
时间:
2012-5-10 11:44
public class MapDemo {
public static void main(String[] args) {
demo2();
}
private static void demo2() {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("张三", 85);
map.put("李四", 88);
map.put("王五", 80);
map.put("赵六", 80);
Set<String> set = map.keySet();
for(Iterator<String> iter = set.iterator(); iter.hasNext();)
System.out.println(iter.next()+ map.get(iter.next())); //你的iter.next()执行的时候就已经跳到下一个对象中去了所以要用foreach循环做
}
作者:
小小企鹅
时间:
2012-5-10 12:28
本帖最后由 小小企鹅 于 2012-10-27 22:37 编辑
import java.util.*;
public class MapDemo {
public static void main(String[] args) {
demo2();
}
private static void demo2() {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("张三", 85);
map.put("李四", 88);
map.put("王五", 80);
map.put("赵六", 80);
Set<String> set = map.keySet();
for(Iterator<String> iter = set.iterator(); iter.hasNext();){
String str = iter.next();
System.out.println(str + map.get(str));
//System.out.println(iter.next() + map.get(iter.next()));
//每个for循环iter.next()执行了2次,for在第二次执行后没有元素可以迭代;
}
}
}
作者:
徐然
时间:
2012-5-10 13:02
本帖最后由 徐然 于 2012-5-10 13:09 编辑
public class MapDemo {
public static void main(String[] args) {
demo2();
}
private static void demo2() {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("张三", 85);
map.put("李四", 88);
map.put("王五", 80);
map.put("赵六", 80);
Set<String> set = map.keySet();
for(Iterator<String> iter = set.iterator(); iter.hasNext();)
System.out.println(iter.next() + map.get(iter.next()));
//for循环条件里已经在迭代了,这里再next() ,那取的不就是第二个了吗
}
作者:
黄坚声
时间:
2012-5-10 13:07
//最常规的一种遍历方法,最常规就是最常用的,虽然不复杂,但很重要,这是我们最熟悉的,就不多说了!!
public static void work(Map<String, Student> map) {
Collection<Student> c = map.values();
Iterator it = c.iterator();
for (; it.hasNext();) {
System.out.println(it.next());
}
}
这个方法是我从张孝祥视频学到的。
作者:
黄坚声
时间:
2012-5-10 13:10
//利用keyset进行遍历,它的优点在于可以根据你所想要的key值得到你想要的 values,更具灵活性!!
public static void workByKeySet(Map<String, Student> map) {
Set<String> key = map.keySet();
for (Iterator it = key.iterator(); it.hasNext();) {
String s = (String) it.next();
System.out.println(map.get(s));
}
}
//比较复杂的一种遍历在这里,呵呵~~他很暴力哦,它的灵活性太强了,想得到什么就能得到什么~~
public static void workByEntry(Map<String, Student> map) {
Set<Map.Entry<String, Student>> set = map.entrySet();
for (Iterator<Map.Entry<String, Student>> it = set.iterator(); it.hasNext();) {
Map.Entry<String, Student> entry = (Map.Entry<String, Student>) it.next();
System.out.println(entry.getKey() + "--->" + entry.getValue());
}
}
}
这两个方法是我从毕向东视频学的。
作者:
魏征
时间:
2012-5-10 13:53
因为当你循环时System.out.println(iter.next() + map.get(iter.next())); iter.next()是集合中下一个值,所以你打印出来是第一个的键,第二个的值,应当创建对象去接受就iter.next()不会出现这个情况了, 下面的是我改完的代码,运行试试
public class MapDemo {
public static void main(String[] args) {
demo2();
}
private static void demo2() {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("张三", 85);
map.put("李四", 88);
map.put("王五", 80);
map.put("赵六", 80);
Set<String> set = map.keySet();
for(Iterator<String> iter = set.iterator(); iter.hasNext();)
{
String str=iter.next();//创建泛型的类型对象接受iter.next();
System.out.println(str+ map.get(str));
}
}
作者:
蒋映辉
时间:
2012-5-10 13:59
iter.hasNext();语句就已经把指针后移了 这个跟read()差不多
感觉JAVA里的读取好像都是这样的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2