如何使类的实例从数组列表中删除自己

时间:2013-07-01 20:11:03

标签: java arraylist

在java中,我想在数组列表中有一个类的实例在主循环完成后自行删除,而不仅仅是一个随机的,而是实例本身。我该怎么做?

3 个答案:

答案 0 :(得分:2)

java的List类中的remove方法删除了由'=='运算符确定的插入其中的确切对象。

这样的事可能适合你:

public interface IDeleteListener<T> {
    void delete(SelfDeleteItem<T> item);
}

public class SelfDeleteItem<T> {
    IDeleteListener<T> listener;
    T item;

    public SelfDeleteItem(T item) {
        this.item = item;
    }

    public void fireDelete() {
        listener.delete(this);
    }
            public void setDeleteListener(IDeleteListener<T> listener){
                this.listener = listener;
            }
}

public class DeleteList<T> {
    private List<SelfDeleteItem<T>> items;
    IDeleteListener<T> deleteListener;

    public DeleteList() {
        this.items = new ArrayList<SelfDeleteItem<T>>();
        this.deleteListener = new IDeleteListener<T>() {
            public void delete(SelfDeleteItem<T> item) {
                items.remove(item);
            }
        };
    }

    public SelfDeleteItem<T> add(T item) {
                    SelfDeleteItem<T> test= new SelfDeleteItem<T>(item);
                    test.setDeleteListener(this.deleteListener);
        this.items.add(test);
    }
}

一个例子:

DeleteList<String> list= //...
SelfDeleteItem<String> deleteItem = list.add("test");
deleteItem.fireDelete();

此代码的工作方式是,每次将某个值的实例添加到DeleteList时,它都放在一个包装器SelfDeleteItem中。自删除项目有一个监听器,它会在想要删除时通知它。 DeleteList将自己注册为SelfDeleteItem想要删除时的监听器,并在这种情况下继续删除SelfDeleteItem。

通过侦听器将列表与项目分离,并实现允许项目自行删除的目标。

至于用途,此方法对音频和网络缓冲区缓存很有用。能够缓存或解除对象而不创建依赖关系是可取的。

答案 1 :(得分:1)

如果我正确理解您的问题,您希望删除已添加到ArrayList的Object的特定实例。如果是这种情况,请在main方法结束时拨打:

public boolean remove(Object o) 

ArrayList的method

以下是该方法的工作原理。从此列表中删除指定元素的第一个匹配项(如果存在)。如果列表不包含该元素,则不会更改。更正式地,删除具有最低索引i的元素,使(o==null ? get(i)==null : o.equals(get(i)))(如果存在这样的元素)。如果此列表包含指定的元素,则返回true(或等效地,如果此列表因调用而更改)。

答案 2 :(得分:1)

类实例必须知道它在列表中。据推测,当将实例添加到列表时,该类将具有一个被调用的方法。然后当实例想要从列表中删除它时,它使用列表的“删除”方法,例如:“mainList.remove(this);”。

通常,您希望处理从类外部添加和删除列表;类实例不应该知道或关心它是否在列表中。另一方面,有时一个班级必须注意自己,并从列表和其他联系中解脱出来。