给你看个把HashMap转换为Iterator的例子:
HashMap hashMap = queryForm.getValue();
Iterator it = hashMap.keySet().iterator();
while (it.hasNext()) {
String key = (String)it.next();
String value = (String)hashMap.get(key);
...
}
HashMap hashMap = queryForm.getValue();
Iterator it = hashMap.keySet().iterator();
while (it.hasNext()) {
String key = (String)it.next();
String value = (String)hashMap.get(key);
...
}
HashMap hashMap = queryForm.getValue();
Iterator it = hashMap.keySet().iterator();
while (it.hasNext()) {
String key = (String)it.next();
String value = (String)hashMap.get(key);
...
}--------------------------------------------------------------
这样写的好处并没有反映出iterator的好处啊,仍然需要转换很多次代码,因为时map,所以你就多了句String value = (String)hashMap.get(key);,如果你要转换成ArrayList呢?这个value是不是都要改?那不一样没有因为加入了iterator而使代码更普遍化吗?
Iterator e=codeMeiMap.keySet().iterator();
while(e.hasNext()){
String key=e.next().toString();
//.......
}
我个人认为是必要的一次List 和map之间要转化!
但是仅仅通过这个转化map的操作弹性扩大了!使用更方便啦.
不用有时候通过冗杂的数据存储啦!
所谓iterator就是迭代器。它的作用就是一个接一个的,不重复的提取容器内的元素。因为容器类的元素排列可以是有序的(例如List),也可以是无序而随机的(例如Set),而有序的排列又可能有多种不同的排列方法。当你只需要列举所有的元素而不在乎它们的顺序时,使用迭代器可以忽略排列顺序。如果你不用iterator就很难遍历元素,因为你将需要事先知道这些元素的排列顺序。
那么:
既然容器的元素可以是有序或者无序的,那么它就应该不管有序或无序都能正常将数据遍历输出,为什么说不用iterator就很难遍历所有元素吗,你能举例说明什么情况不用iterator而不能遍历输出无序的数据吗?并且也请解释一下对于数据的有序和无序是指的什么呢?
某个特定容器的iterator是这样用的:
while(iterator.hasNext()){
Object o=iterator.next()
}
使用这种方法,iterator一个接一个地从容器中提取元素。提取的顺序依照容器的类型而定,但是它总能保证将容器中的元素都遍历一边,既不重复也不会遗漏。之所以Iterator能做到这样,是因为Iterator有基于容器类型内建的算法。
所谓有序和无序,指的是容器内元素是按某种顺序排列还是随机排列。对于HashSet来说,它将其内的元素按照hashCode(散列码)排列。因为散列码几乎可以看作是随机的,所以HashSet也看作一个无顺序的容器。又比如一个把字符串按照打头字母排列的容器。显然字母表是一种有顺序的排列,所以此容器可被看作有顺序的。
给你一个Set,而你不知道里面的元素是些什么,叫你遍历一遍--这就比如,给你一个袋子,里面装有很多一模一样(至少摸起来如此)的小球,让你用手摸,每个小球只能摸一次(不能拿出来),这是不是很难?这就是没有一种遍历机制供你使用或者你对容器的元素一无所知的时候的困境。
正如我所说的,Map不是Collection,因此它没有迭代器。Map的基本构造是:(Object key,Object item)--一个唯一的键对应一个唯一的元素。显然,Map是无法直接遍历的。想直接访问Map的某个元素(item),你必须预先知道这个元素的键(key)才能把它找出来。如果你要用这种方式遍历Map的所有元素,你必须知道所有元素的key。如果你对这些key一无所知或者不能全部知道,你就无法用这种方法遍历Map的所有元素。不过Map提供了另外一些方法使得遍历Map不是很复杂,但是比起Collection来说还是费点周折的。
很感谢你的回答,很详细,也很系统,让我重新理解了一遍容器机制。谢谢同时也很感谢大家给我的帮助,在这里一并感谢。我也在《编程思想2》的360页中看到了这样的代码,也很好的阐述了大家上面所说的转换机制,的确很方便灵活代码如下:import java.util.*;class Mouse{
private int mouseNumber;
Mouse(int i){
mouseNumber = i;
}
public String toString(){
return "This is Mouse # " + mouseNumber;
}
public int getNumber(){
return mouseNumber;
}
}class Hamster{
private int hamsterNumber;
Hamster(int i){
hamsterNumber = i ;
}
public String toString(){
return "this is Hamster # " + hamsterNumber;
}
}class PrintData{
static void print(Iterator e){
while(e.hasNext()){
System.out.println(e.next());
}
}
}class Iterators2{
public static void main(String[] args){
ArrayList v = new ArrayList();
for (int i = 0; i < 5; i++){
v.add(new Mouse(i));
}
HashMap m = new HashMap();
for (int i = 0; i < 5; i++){
m.put(new Integer(i),new Hamster(i));
}
System.out.println("ArrayList");
PrintData.print(v.iterator());
System.out.println("HashMap");
PrintData.print(m.entrySet().iterator());
}
}