我正在嘗試使用 android studio 從 java 中的陣列串列中洗掉一個物件。
public class ToDoListManager {
private List<ToDoItem> items;
public ToDoListManager() {
items = new ArrayList<ToDoItem>();
items.add(new ToDoItem("Get Milk", false));
items.add(new ToDoItem("Walk the dog", true));
items.add(new ToDoItem("Go to the gym", false));
}
public List<ToDoItem> getItems() {
return items;
}
public void addItem(ToDoItem item) {
items.add(item);
}
public void removeItem(ToDoItem item) {
items.remove(item);
}
}
我一直在通過按鍵呼叫 removeItem 函式
當我添加時,讓我們對陣列說“測驗”,它使用 items.add(item) 成功添加它,但是當我嘗試給定相同字串的 items.remove(item) 時,它不起作用。如果我這樣做就有效items.remove(1),但如果我這樣做則無效items.remove("test")
我怎么能解決這個問題?我嘗試了很多不同的方法。謝謝。
uj5u.com熱心網友回復:
在構成 ArrayList 的各種介面中實作的“remove”方法采用不同的引數并做非常不同的事情。
ArrayList.remove 簽名是
public E remove(int index)
它從串列中的位置中洗掉,因此如果串列具有多個“索引”項,它將起作用。因此,當您使用整數呼叫它時,它會被使用并起作用。
List.remove 簽名是
boolean remove(Object o);
如果物件等于串列中的物件,則從串列中洗掉該物件。因此,當您向它傳遞一個字串即“test”時,這將無法作業,因為“test”不是 ToDoItem,因此等于比較失敗。
如果您想使用“List.remove”,即洗掉一個物件,您需要確保“equals”方法將在“ToDoItem”中作業。那么你的 equals 方法在 ToDoItem 中是什么樣子的呢?
uj5u.com熱心網友回復:
你items只接受ToDoItem物件。
所以,items.remove("test")不會作業。這"test"是一個 String 物件。
但是items.remove(1)會起作用,因為在這里您將index值作為引數傳遞給remove()方法。所以來自items指定索引的物件將被洗掉。
要從items串列中洗掉指定的物件,您需要將該ToDoItem物件作為引數傳遞。
閱讀更多:如何從 ArrayList 中洗掉元素?
注意:如果你想兩個比較ToDoItem其資料成員的值物件,覆寫等于在方法ToDoItem。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/372857.html
