黑马程序员技术交流社区
标题:
集合元素遍历的疑问
[打印本页]
作者:
李万海
时间:
2013-3-24 09:16
标题:
集合元素遍历的疑问
本帖最后由 李万海 于 2013-3-28 18:45 编辑
下面是部分遍历集合元素的代码。
//利用迭代器进行遍历
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());
}
}
//利用keyset进行遍历
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));
}
}
//利用entrySet进行遍历
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());
}
}
}
复制代码
这三种方法在遍历集合时,他们的优缺点是什么?哪种方式更适合在实际开发中应用?为什么?
如果用高级for循环来遍历的话,又有什么区别呢?
作者:
胡志超
时间:
2013-3-24 09:49
本帖最后由 胡志超 于 2013-3-24 09:53 编辑
当然是
利用entrySet进行遍历
,利用key查value,效率更高点,优缺点我也没有系统的总结,
作者:
谷文仁
时间:
2013-3-24 10:29
Set<K> keySet()
返回此映射中包含的键的 Set 视图。 写的很清楚就是key的Set
Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射关系的 Set 视图。
也是一个Set,而Set中每个元素是内部类Map.Entry。
for(){}
只能获取集合元素。但是不能对集合进行操作
迭代器除了遍历集合元素,还可以进行remove集合中元素的动作
如果是用Listiterator 还可以在遍历过程中对集合进行增删改查的动作
传统for和高级for有什么区别呢?
高级for有一个局限性必须有被遍历的目标
作者:
lucy198921
时间:
2013-3-24 10:47
A
测试keySet()与entrySet()的迭代时间
keySet():迭代后只能通过get()取key
entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口 .
最后说明下keySet()的速度比entrySet()慢了很多。
B
迭代器的概念:
对已集合类中的任何一个实现类,都可以返回这样一个Iterator对象。
就和循环一样,好处是可以适用于任何一个类,而且实际上java对他进行了优化,比直接用index访问快一点
有一点很好,就是用起来确实很好用~~加上泛型就更好用啦~~
配合上泛型,一个好处是it.next()可以不用类型转换啦~
以前用的时候是Object,还要自己转.
我认为,Iterator和泛型简直就是绝配哈~~单独用貌似都没什么直接好处
作者:
黑马-郑玉元
时间:
2013-3-28 20:55
就当是我给自己总结吧,首先要知道的是不同集合可以使用的方法是不一样的,下面我就详细说明下;
List:
ArrayList , LinkedList , Vector: 这三种集合里的元素是可重复的,是有索引的,索引迭代集合可以用for循环,迭代器,增强for循环,能用迭代器的情况下,增强for循环也可以用,只是要注意,使用增强for循环不可以改变集合里的结构。至于选择哪种,大部分优先考虑用增强for循环,增强for循环也是jdk5的新特性,之所以要这个新特性,也是有一定道理的。
set:
HashSet , LinkedHash , TreeSet :这三种集合里是没有索引的,所以就不能用for循环了, 所以就只能用迭代器和增强for循环了,优先还是考虑使用增强for循环。
Map:
HashMap , TreeMap ,LinkedHashMap :map集合有他们自己和上面不同的方法,分别是keySet()和entrySet(),两种方法,keySet()稍微简单些,至于说的效率,我觉得没多大的必要去考虑那些!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2