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

生手,关于Collection删除元素

2012-09-29 
新手,关于Collection删除元素Java codeimport java.io.*import java.util.*class MMT{private T name

新手,关于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.");            }        }    }} 


[解决办法]

探讨

引用:

引用:

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

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

[解决办法]
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();
}

}

热点排行