import java.io.*;
import java.util.*;class MM<T>
{
private T name;
public MM(T name)
{ setName(name); }
public void setName(T name)
{ this.name=name; }
public T getName()
{ return this.name; }
public String toString()
{ return "The MM's name is "+this.name.toString(); }
}
public class GenericsDemo30
{
public  static final int quantities=5;
public static void main(String[] args) throws IOException
{
Collection co1=new ArrayList();
String name="";
BufferedReader br=null;
//创建
for(int i=0;i<quantities;i++)
{
br=new BufferedReader(new InputStreamReader(System.in));
name=br.readLine();
MM mm=new MM(name);
co1.add(mm);
}
//输出
Iterator iter=co1.iterator();
while(iter.hasNext())
{
System.out.println(iter.next());
}
//删除
iter=co1.iterator();
System.out.println("输入想要移除的名字:");
br=new BufferedReader(new InputStreamReader(System.in));
name=br.readLine();
MM tmp=new MM(name);
while(iter.hasNext())
{
if(iter.next().getName()==tmp.getName())//The method getName() is undefined for the type Object... 提示Object里面没有这个方法,但删除元素不知道该怎么操作,求前辈们指点
{
System.out.println("找到该mm");
iter.remove();
iter=co1.iterator();
}
else
{
System.out.println("找不到该mm,删除失败");
iter=co1.iterator();
break;
}
}
//输出
while(iter.hasNext())
{
System.out.println(iter.next());
}
iter=co1.iterator();
}}另外请教一下,在使用Collection时存储对象的时候,这种写法是否略显笨拙,前辈们提点一下

解决方案 »

  1.   

    while(iter.hasNext())
            {
                System.out.println(iter.next());
            }你是想删除所有的元素?
    用ArrayList.clear()方法就可以了,如果想要手动删除,也可以如下:
    while (!list.isEmpty()) {
        list.removeElementAt(0);
    }
      

  2.   

    思想不错,class MM<T>没有必要使用泛型吧 直接在里面用String 就行吧,Collection co1=new ArrayList(); 也没有必要啊,直接ArrayList list = new ArrayList()就行了呀,代码写的太乱了,确实需要整理一下,具体的优化,我给你提个建议吧,把 创建,删除什么的 提取出来形成方法就好看了
      

  3.   

    你的name怎么用==比对呢?对象比对应该使用.equals方法,还有为什么iter.remove()后要重新获取一个iteraotr?remove后的iter是不会变的,被删除的是集合的当前元素
      

  4.   

    这跟泛型有什么关系
    public class IteratorRemovalDemo {
     
        private static final Scanner SCANNER = new Scanner(System.in);
     
        // 程序入口
        public static void main(String[] args) {
            List<String> girls = inputGirls();
     
            String girlName = prompt("Girl's name to be removed:");
            removeGirlByName(girls, girlName);
        }
     
        /**
         * 用户输入 MM 名字
         *
         * @return MM 名字列表
         */
        private static List<String> inputGirls() {
            List<String> girls = new ArrayList<String>();
            String name;
     
            do {
                name = prompt("Enter a girl's name(press enter to finish):");
     
                if (!name.equals("")) {
                    girls.add(name);
                }
            } while (!name.equals(""));
     
            return girls;
        }
     
        /**
         * 提示用户输入
         *
         * @param message 提示信息
         *
         * @return 用户输入
         */
        private static String prompt(String message) {
            System.out.print(message);
            return SCANNER.nextLine().trim();
        }
     
        /**
         * 从 MM 列表中删除指定的名字
         *
         * @param girls    MM列表
         * @param girlName 要删除的名字
         */
        private static void removeGirlByName(List<String> girls, String girlName) {
            Iterator<String> girlsIterator = girls.iterator();
            while (girlsIterator.hasNext()) {
                String name = girlsIterator.next();
     
                if (name.equals(girlName)) {
                    girlsIterator.remove();
                    System.out.println("\"" + girlName + "\" has been removed.");
                }
            }
        }
    }
      

  5.   

    if(iter.getName().equals(name))
    改成这样子 但是提示没有定义getName()方法0.0
    要怎么做
      

  6.   

    iter是迭代器,getName是集合中元素对象的方法,要获取迭代器中的下一个元素应该iter.next(),所以你应该写成iter.next().getName().equals(name)
      

  7.   

    if(iter.next().getName().equals(name))
      

  8.   

    错了.... 应该是if(((MM)iter.next()).getName().equals(name))
      

  9.   

    Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList$Itr cannot be cast to MM
    at GenericsDemo30.main(GenericsDemo30.java:48)
    QAQ 为神摸
      

  10.   

    import java.io.*;
    import java.util.*;class MM<T> {
    private T name; public MM(T name) {
    System.out.println("构造方法执行");
    setName(name);
    }
    public void setName(T name) {
    System.out.println("setName方法执行");
    this.name = name;
    } public T getName() {
    System.out.println("getName方法执行");
    return this.name;
    } public String toString() {//重写了toString方法,当执行的时候会执行
    System.out.println("toString()方法执行2222");
    return "The MM's name is " + this.name.toString();

    }
    }public class GenericsDemo30 {
    public static final int quantities = 5; public static void main(String[] args) throws IOException {
    Collection co1 = new ArrayList();
    String name = "";
    BufferedReader br = null;
    // 创建
    for (int i = 0; i < quantities; i++) {
    br = new BufferedReader(new InputStreamReader(System.in));
    name = br.readLine();
    MM mm = new MM(name);
    //System.out.println("++++++++++++++++++"+mm);
    co1.add(mm);
    }
    // 输出/////////---------------------------------------------
    Iterator iter = co1.iterator();
    while (iter.hasNext()) {
    System.out.println(iter.next());
    }
    // 删除
    iter = co1.iterator();
    System.out.println("输入想要移除的名字:");
    br = new BufferedReader(new InputStreamReader(System.in));
    name = br.readLine();
    MM tmp = new MM(name);
    while (iter.hasNext()) {
    String a=(String) ((MM) iter.next()).getName();
    String b=tmp.getName().toString(); 
    if (a.equals(b))// The method
    // getName() is
    // undefined for
    // the type
    // Object...
    // 提示Object里面没有这个方法,但删除元素不
    {
    System.out.println("找到该mm");
    iter.remove();
    iter = co1.iterator();
    break;
    } else {
    System.out.println("找不到该mm,删除失败");
    iter = co1.iterator();
    break;
    }
    }
    // 输出
    while (iter.hasNext()) {
    System.out.println(iter.next());
    }
    iter = co1.iterator();
    }}
      

  11.   

    import java.io.*;
    import java.util.*;class MM<T> {
    private T name; public MM(T name) {
    System.out.println("构造方法执行");
    setName(name);
    }
    public void setName(T name) {
    System.out.println("setName方法执行");
    this.name = name;
    } public T getName() {
    System.out.println("getName方法执行");
    return this.name;
    } public String toString() {//重写了toString方法,当执行的时候会执行
    System.out.println("toString()方法执行2222");
    return "The MM's name is " + this.name.toString();

    }
    }public class GenericsDemo30 {
    public static final int quantities = 5; public static void main(String[] args) throws IOException {
    Collection co1 = new ArrayList();
    String name = "";
    BufferedReader br = null;
    // 创建
    for (int i = 0; i < quantities; i++) {
    br = new BufferedReader(new InputStreamReader(System.in));
    name = br.readLine();
    MM mm = new MM(name);
    //System.out.println("++++++++++++++++++"+mm);
    co1.add(mm);
    }
    // 输出/////////---------------------------------------------
    Iterator iter = co1.iterator();
    while (iter.hasNext()) {
    System.out.println(iter.next());
    }
    // 删除
    iter = co1.iterator();
    System.out.println("输入想要移除的名字:");
    br = new BufferedReader(new InputStreamReader(System.in));
    name = br.readLine();
    MM tmp = new MM(name);
    while (iter.hasNext()) {
    String a=(String) ((MM) iter.next()).getName();
    String b=tmp.getName().toString(); 
    if (a.equals(b))// The method
    // getName() is
    // undefined for
    // the type
    // Object...
    // 提示Object里面没有这个方法,但删除元素不知道该怎么操作,求前辈们指点
    {
    System.out.println("找到该mm");
    iter.remove();
    iter = co1.iterator();
    break;
    } else {
    System.out.println("找不到该mm,删除失败");
    iter = co1.iterator();
    break;
    }
    }
    // 输出
    while (iter.hasNext()) {
    System.out.println(iter.next());
    }
    iter = co1.iterator();
    }}
    运行出来了,你试试吧
      

  12.   

    运行结果QAQ1
    构造方法执行
    setName方法执行
    2
    构造方法执行
    setName方法执行
    3
    构造方法执行
    setName方法执行
    4
    构造方法执行
    setName方法执行
    5
    构造方法执行
    setName方法执行
    toString()方法执行2222
    The MM's name is 1
    toString()方法执行2222
    The MM's name is 2
    toString()方法执行2222
    The MM's name is 3
    toString()方法执行2222
    The MM's name is 4
    toString()方法执行2222
    The MM's name is 5
    输入想要移除的名字:
    2
    构造方法执行
    setName方法执行
    getName方法执行
    getName方法执行
    找不到该mm,删除失败
    toString()方法执行2222
    The MM's name is 1
    toString()方法执行2222
    The MM's name is 2
    toString()方法执行2222
    The MM's name is 3
    toString()方法执行2222
    The MM's name is 4
      

  13.   

    能输出呀
    import java.io.*;
    import java.util.*;class MM<T>
    {
        private T name;
        public MM(T name)
        { setName(name); }
        public void setName(T name)
        { this.name=name; }
        public T getName()
        { return this.name; }
        public String toString()
        { return "The MM's name is "+this.name.toString(); }
    }
    public class GenericsDemo30
    {
        public  static final int quantities=5;
        public static void main(String[] args) throws IOException
        {
            Collection co1=new ArrayList();
            String name="";
            BufferedReader br=null;
    //创建
            for(int i=0;i<quantities;i++)
            {    
                br=new BufferedReader(new InputStreamReader(System.in));
                name=br.readLine();
                MM mm=new MM(name);
                co1.add(mm);
            }
    //输出
            Iterator iter=co1.iterator();
            while(iter.hasNext())
            {
                System.out.println(iter.next());
            }
    //删除        
            iter=co1.iterator();
            System.out.println("输入想要移除的名字:");
            br=new BufferedReader(new InputStreamReader(System.in));
            name=br.readLine();
            MM tmp=new MM(name);
            while (iter.hasNext()) {
              String a=(String) ((MM) iter.next()).getName();
              String b=tmp.getName().toString();  
             if (a.equals(b))// The method
             {
             System.out.println("找到该mm");
              iter.remove();
              iter = co1.iterator();
              break;
              } else {
                {
                    System.out.println("找不到该mm,删除失败");
                    iter=co1.iterator();
                    break;
                }
            }
             }
    //输出
            while(iter.hasNext())
            {
                System.out.println(iter.next());
            }
            iter=co1.iterator();
        }    }
    结果是:
    1
    2
    3
    4
    5
    The MM's name is 1
    The MM's name is 2
    The MM's name is 3
    The MM's name is 4
    The MM's name is 5
    输入想要移除的名字:
    1
    找到该mm
    The MM's name is 2
    The MM's name is 3
    The MM's name is 4
    The MM's name is 5
      

  14.   

    我知道我那错了这是正确的已经改正了~--------如下-----------import java.io.*;
    import java.util.*;class MM<T>
    {
        private T name;
        public MM(T name)
        { setName(name); }
        public void setName(T name)
        { this.name=name; }
        public T getName()
        { return this.name; }
        public String toString()
        { return "The MM's name is "+this.name.toString(); }
    }
    public class GenericsDemo30
    {
        public  static final int quantities=5;
        public static void main(String[] args) throws IOException
        {
            Collection co1=new ArrayList();
            String name="";
            BufferedReader br=null;
    //创建
            for(int i=0;i<quantities;i++)
            {    
                br=new BufferedReader(new InputStreamReader(System.in));
                name=br.readLine();
                MM mm=new MM(name);
                co1.add(mm);
            }
    //输出
            Iterator iter=co1.iterator();
            while(iter.hasNext())
            {
                System.out.println(iter.next());
            }
    //删除        
            iter=co1.iterator();
            System.out.println("输入想要移除的名字:");
            br=new BufferedReader(new InputStreamReader(System.in));
            name=br.readLine();
            MM tmp=new MM(name);
            while (iter.hasNext()) {
              String a=(String) ((MM) iter.next()).getName();         // System.out.println(a);
              String b=tmp.getName().toString();  
             // System.out.println(b);
             if (a.equals(b))// The method
             {
             System.out.println("找到该mm");
              iter.remove();
              iter = co1.iterator();
              break;
              } else {
                    System.out.println("继续寻找中-----");
                    }
             }
    //输出
            while(iter.hasNext())
            {
                System.out.println(iter.next());
            }
            //iter=co1.iterator();
        }    }执行结果如下:
    1
    2
    3
    4
    5
    The MM's name is 1
    The MM's name is 2
    The MM's name is 3
    The MM's name is 4
    The MM's name is 5
    输入想要移除的名字:
    2继续寻找中-----找到该mm
    The MM's name is 1
    The MM's name is 3
    The MM's name is 4
    The MM's name is 5
      

  15.   


    啪啪啪,知道哪里错了0.0 while(iter.hasNext())
            {
                if(iter.next().getName()==tmp.getName())//这里不能比较0.0
                {
                    System.out.println("找到该mm");
                    iter.remove();
                    iter=co1.iterator();
                }
                else//这个else一旦集合第一个元素不是改mm,就跳出去了0.0 后面就没找了233
                {
                    System.out.println("找不到该mm,删除失败");
                    iter=co1.iterator();
                    break;
                }
            }