首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于iterator的remove方法的有关问题

2013-01-18 
关于iterator的remove方法的问题本帖最后由 raylee2007 于 2013-01-09 16:22:00 编辑package com.nbgnuski

关于iterator的remove方法的问题
本帖最后由 raylee2007 于 2013-01-09 16:22:00 编辑


package com.nbgnuskin.collection;

import java.util.*;

public class IteratorTest {

public IteratorTest() {
// TODO Auto-generated constructor stub
}

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection c = new HashSet();
c.add(new Name("a1","b1"));
c.add(new Name("a2222","b2"));
c.add(new Name("a3","b3"));
c.add(new Name("a4","b4"));
//while(i.hasNext())
//{
//Name n = (Name) i.next();
//if(n.getfirstName().length() > 3)
//{
//i.remove();
//}
//System.out.println(n.getfirstName() + " " + n.getfirstName().length());
//}
for(Iterator i = c.iterator();i.hasNext();)
{
Name n = (Name)i.next();
if (n.getfirstName().length() > 3) {
i.remove();}
System.out.println(n.getfirstName() + " " + n.getfirstName().length());
}
}

}


上面写了一个小程序,主要是测试iterator的remove方法,为什么中间的那个remove方法没有作用?谢谢
[解决办法]

public static void main(String[] args) {

 Collection c = new HashSet();
        c.add(new Name("a1","b1"));
        c.add(new Name("a2222","b2"));
        c.add(new Name("a3","b3"));
        c.add(new Name("a4","b4"));
//        while(i.hasNext())
//        {
//            Name n = (Name) i.next();
//            if(n.getfirstName().length() > 3)
//            {
//                i.remove();
//            }
//            System.out.println(n.getfirstName() + " " + n.getfirstName().length());
//        }
      
        for(Iterator i = c.iterator();i.hasNext();)
        {
        System.out.println(i.toString());
            Name n = (Name)i.next();
            if (n.getFirstName().length() > 3) {
                c.remove(i);        //这一句,看区别    }
            System.out.println(n.getFirstName() + " " + n.getFirstName().length());


        }
}


[解决办法]
另外楼主注意一下规范。
getFirstName();//自动生成的
getfirstName();
最后给改成了增强for的形式,你看下吧。
只是参考而已。

public static void main(String[] args) {

 Collection<Name> c = new HashSet<Name>();
        c.add(new Name("a1","b1"));
        c.add(new Name("a2222","b2"));
        c.add(new Name("a3","b3"));
        c.add(new Name("a4","b4"));
//        while(i.hasNext())
//        {
//            Name n = (Name) i.next();
//            if(n.getfirstName().length() > 3)
//            {
//                i.remove();
//            }
//            System.out.println(n.getfirstName() + " " + n.getfirstName().length());
//        }
      
        /*for(Iterator i = c.iterator();i.hasNext();)
        {
        //System.out.println(i.toString());
            Name n = (Name)i.next();
            System.out.println(n.getFirstName());
            if (n.getFirstName().length() > 3) {
            
                c.remove(i);            
                
            }
            //System.out.println(n.getFirstName().toString() + " " + n.getFirstName().length());
        }*/
        for(Name o:c){
        System.out.println(o.getFirstName());
        if(o.getFirstName().length()>3){
        c.remove(o);
        }
        }
        
        for(Object o:c){
        System.out.println(o.toString());
        }
}

[解决办法]
LZ 的代码的逻辑是移除某些值,打印所有值,看打印的数据当然看不出来是否移除了。
------解决方案--------------------


已经起作用了!


public static void main(String[] args) {
// TODO Auto-generated method stub
Collection c = new HashSet();
c.add(new Name("a1", "b1"));
c.add(new Name("a2222", "b2"));
c.add(new Name("a3", "b3"));
c.add(new Name("a4", "b4"));
System.out.println("操作前集合中的元素个数:" + c.size());
for (Iterator i = c.iterator(); i.hasNext();) {
Name n = (Name) i.next();
if (n.getFirstName().length() > 3) {
i.remove();
}
System.out.println(n.getFirstName() + " "
+ n.getFirstName().length());
}
System.out.println("操作后集合中的元素个数:" + c.size());
}


打印的结果是:


4
a4 2
a1 2
a2222 5
a3 2
3

热点排行