日期:2014-05-20  浏览次数:20950 次

新手,关于Collection删除元素
Java code

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时存储对象的时候,这种写法是否略显笨拙,前辈们提点一下

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


------解决方案--------------------
这跟泛型有什么关系。。。
Java code
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.");
            }
        }
    }
}