当前位置: 代码迷 >> J2SE >> 生手,关于Collection删除元素
  详细解决方案

生手,关于Collection删除元素

热度:1155   发布时间:2013-02-25 00:00:00.0
新手,关于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.");            }        }    }}
  相关解决方案