List和ArrayList删除方法都不起作用

时间:2014-04-09 13:00:19

标签: java arraylist

今天我有一个比昨天更愚蠢的问题,但我真的不明白为什么我的代码不起作用。

代码如下:

public class A{
    List fileList;

    public A(List fl){
        fileList = new ArrayList<String>;
        if(fl != null) {
            fileList = fl;
        }
    }

    public void removeFiles(List fl){
        for(Object obj : fl) {
            fileList.remove(obj.toString());
        }
    }
}

我尝试使用Iterator在网络上找到的所有内容,但没有删除任何文件,也没有出现错误或异常!

  

更多代码

public class CoordinationServer extends Activatable implements CoordinationSerInt
{
List<CoordObj> userList;
public int updateFileList(String username, List files, int option) throws RemoteException{
    for (CoordObj anUserList : userList) {
        if (anUserList.getUsername().equals(username)) {
            if(option == 0){
                anUserList.setFileList(files);
                return 1;

            }else if(option == 1){
                anUserList.addFilesToList(files);
                return 1;

            }else if(option == 2){
                anUserList.removeFiles(files);
                return 1;
            }
            return 0;
        }
    }
    return -1;
}
}

public class CoordObj implements Serializable
{
UserForUser userReference;
List fileList;
String username;

public CoordObj(UserForUser ur, List fl, String un) {
  userReference = ur;
  fileList = new ArrayList<String>();
  if(fl != null)
    fileList = fl;
  username = un;
}

public void removeFiles(List fl){
  this.fileList.removeAll(fl);
}
}

分辨 如果其他人有这个问题,我就这样解决了:

fileList.removeAll(Arrays.asList(fl.toArray()));

4 个答案:

答案 0 :(得分:9)

你正在调用对象toString()方法,不要这样做。只需使用object itself

for(Object obj:fl){
  fileList.remove(obj);
}

哪个会删除btw列表中的所有内容,因此您可以执行clear()

答案 1 :(得分:3)

这是错误的

fileList = new ArrayList<String>;

将此更改为

 fileList = new ArrayList<String>();

答案 2 :(得分:0)

它不会抛出错误或异常。根据{{​​3}},可以选择投掷ClassCastExceptionList不会投掷。它还声明&#34; ..如果此列表不包含该元素,则不会更改...&#34; 。因此,该操作基本上是无操作。

使用fileList.removeAll(fl)删除要从fileList删除的所有内容。不需要循环。如果更改removeAll,则true会返回fileList,因此您可以检查操作是否成功。

答案 3 :(得分:0)

当您宣布列出String类型时,您可以这样做:

fileList = new ArrayList<String>();

 for(String str : fl){
      fileList.remove(str);
 }