在java中,我想在数组列表中有一个类的实例在主循环完成后自行删除,而不仅仅是一个随机的,而是实例本身。我该怎么做?
答案 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);”。
通常,您希望处理从类外部添加和删除列表;类实例不应该知道或关心它是否在列表中。另一方面,有时一个班级必须注意自己,并从列表和其他联系中解脱出来。