0

我想知道这个方法是如何remove(Object e)工作的。我有这个代码:

    Vector<Actor> toChoose;
    Vector<Actor> toDelete;

    toDelete = film.getActors();
    toChoose = db.getActors();

    System.out.println("To Delete:");
    for (int i = 0; i < toDelete.size(); i++){
        System.out.println(toDelete.get(i).getName());
    }
    System.out.println("===============");

    System.out.println("To choose:");
    for (int i = 0; i < toChoose.size(); i++){
        System.out.println(toChoose.get(i).getName());
    }
    System.out.println("===============");


    for (int i = 0; i < selectedActors.size(); i++){
        toChoose.remove((Actor) selectedActors.get(i));
    }

    System.out.println("To choose after deleting:");
    for (int i = 0; i < toChoose.size(); i++){
        System.out.println(toChoose.get(i));
    }
    System.out.println("===============");

这是输出:

To Delete:
Angelina Jolie
Louis de Funes
===============
To choose:
Angelina Jolie
Louis de Funes
Lukáš Hamrla
Brad Pitt
===============
To choose after deleting:
Angelina Jolie
Louis de Funes
Lukáš Hamrla
Brad Pitt
===============

我想这显然是我想要的。我不知道如何从中toDelete删除对象toChoose

4

3 回答 3

3

Vector实现List。为了从列表中删除,javadoc 说:

删除具有最低索引的元素 i 使得 (o==null ? get(i)==null : o.equals(get(i))) (如果存在这样的元素)。

由于没有删除任何元素,这当然意味着Actor不实现.equals()/ .hashCode()

笔记:

  • List下次使用,例如ArrayList; Vector已经过时了很多很多年(但由于某种原因,它仍然没有被标记为已弃用!!!);
  • List.{remove,add}All()
  • foreach 循环已经存在很多很多年了。

因此,要使您的代码现代化:声明

List<Actor> toChoose = ...;
// etc

还:

for (final Actor actor: toChoose)
    System.out.println(actor);

最后:

toChoose.removeAll(selectedActors);
于 2013-06-07T00:11:15.270 回答
0
for (Actor actor : toDelete){
        toChoose.remove(actor);
}

正如其他人所提到的。如果Actor不实施.equals.hashCode

于 2013-06-07T00:10:17.483 回答
0

我会冒险:Actor需要实现equals()and hashCode(),但没有。

于 2013-06-07T00:12:34.697 回答