![](/img/trans.png)
[英]Remove object from Arraylist Java, only working in specific scenarios
[英]How to remove specific object from ArrayList in Java?
如何從 ArrayList 中刪除特定對象? 假設我有一個類如下:
import java.util.ArrayList;
public class ArrayTest {
int i;
public static void main(String args[]){
ArrayList<ArrayTest> test=new ArrayList<ArrayTest>();
ArrayTest obj;
obj=new ArrayTest(1);
test.add(obj);
obj=new ArrayTest(2);
test.add(obj);
obj=new ArrayTest(3);
test.add(obj);
}
public ArrayTest(int i){
this.i=i;
}
}
如何從我的ArrayList<ArrayList>
刪除帶有new ArrayTest(1)
對象
ArrayList
基於equals(Object obj)
方法刪除對象。 所以你應該正確地實現這個方法。 就像是:
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj == this) return true;
if (!(obj instanceof ArrayTest)) return false;
ArrayTest o = (ArrayTest) obj;
return o.i == this.i;
}
要么
public boolean equals(Object obj) {
if (obj instanceof ArrayTest) {
ArrayTest o = (ArrayTest) obj;
return o.i == this.i;
}
return false;
}
如果您使用的是 Java 8:
test.removeIf(t -> t.i == 1);
Java 8 在集合接口中有一個removeIf
方法。 對於 ArrayList,它具有高級實現(n 階)。
通常,可以通過兩種方式從ArrayList
(或通常任何List
)中remove(int)
對象,通過索引( remove(int)
)和通過對象( remove(Object)
)。
在此特定場景中:將equals(Object)
方法添加到ArrayTest
類。 這將允許ArrayList.remove(Object)
識別正確的對象。
要從 arrayList 中刪除特定對象,有兩種方法。 調用arrayList的函數。
arrayList.remove(object);
這將刪除您的對象,但在大多數情況下,當 arrayList 包含 UserDefined DataTypes 的項目時,此方法不會為您提供正確的結果。 它僅適用於原始數據類型。 因為用戶想根據對象字段值刪除項目,而刪除功能無法自動比較。
arrayList.remove(index);
這是完整的例子。 我們必須使用迭代器的 remove()方法
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayTest {
int i;
public static void main(String args[]) {
ArrayList<ArrayTest> test = new ArrayList<ArrayTest>();
ArrayTest obj;
obj = new ArrayTest(1);
test.add(obj);
obj = new ArrayTest(2);
test.add(obj);
obj = new ArrayTest(3);
test.add(obj);
System.out.println("Before removing size is " + test.size() + " And Element are : " + test);
Iterator<ArrayTest> itr = test.iterator();
while (itr.hasNext()) {
ArrayTest number = itr.next();
if (number.i == 1) {
itr.remove();
}
}
System.out.println("After removing size is " + test.size() + " And Element are :" + test);
}
public ArrayTest(int i) {
this.i = i;
}
@Override
public String toString() {
return "ArrayTest [i=" + i + "]";
}
}
使用此代碼
test.remove(test.indexOf(obj));
test is your ArrayList and obj is the Object, first you find the index of obj in ArrayList and then you remove it from the ArrayList.
List<Object> list = new ArrayList();
for (Iterator<Object> iterator = list.iterator(); iterator.hasNext();) {
Object obj= iterator.next();
if (obj.getId().equals("1")) {
// Remove the current element from the iterator and the list.
iterator.remove();
}
}
如果要刪除與該屬性匹配的多個對象,請嘗試此操作。
我使用以下代碼從它幫助我的對象數組中刪除元素。
通常,可以通過兩種方式從ArrayList
(或通常任何 List)中刪除object
,通過index
(remove(int)) 和通過object
(remove(Object))。
一些時間使用這些行arrayList.remove(index)
或arrayList.remove(obj.get(index))
可能不起作用嘗試使用以下代碼。
for (Iterator<DetailInbox> iter = detailInboxArray.iterator(); iter.hasNext(); ) {
DetailInbox element = iter.next();
if (element.isSelected()) {
iter.remove();
}
}
我試過這個,它對我有用:
ArrayList<cartItem> cartItems= new ArrayList<>();
//filling the cartItems
cartItem ci=new cartItem(itemcode,itemQuantity);//the one I want to remove
Iterator<cartItem> itr =cartItems.iterator();
while (itr.hasNext()){
cartItem ci_itr=itr.next();
if (ci_itr.getClass() == ci.getClass()){
itr.remove();
return;
}
}
阿瓦爾切夫是對的。 更快的解決方案是解析所有元素並按唯一屬性進行比較。
String property = "property to delete";
for(int j = 0; j < i.size(); j++)
{
Student obj = i.get(j);
if(obj.getProperty().equals(property)){
//found, delete.
i.remove(j);
break;
}
}
這是一個快速的解決方案。 對於較大的項目,您最好實現對象比較。
這幫助了我:
card temperaryCardFour = theDeck.get(theDeck.size() - 1);
theDeck.remove(temperaryCardFour);
代替
theDeck.remove(numberNeededRemoved);
我在第一個代碼片段上得到了一個刪除構象,在第二個代碼片段上得到了一個未刪除構象。
嘗試使用第一個片段切換您的代碼,我認為這是您的問題。
內森·納爾遜
簡單使用 remove() 函數。 並將對象作為您要刪除的參數傳遞。 你的arraylist.remove(obj)
或者你可以使用 java 8 lambda
test.removeIf(i -> i==2);
它將簡單地刪除所有滿足條件的對象
當從測試 ArrayList 中刪除 ArrayTest(1) 時使用下面的一個
test.removeIf(
(intValue) -> {
boolean remove = false;
remove = (intValue == 1);
if (remove) {
//Success
}
return remove;
});
private List<Employee> list = new ArrayList<>();
list.removeIf(emp -> emp.getId() == 10);
ArrayTest obj=new ArrayTest(1);
test.add(obj);
ArrayTest obj1=new ArrayTest(2);
test.add(obj1);
ArrayTest obj2=new ArrayTest(3);
test.add(obj2);
test.remove(object of ArrayTest);
您可以指定如何控制每個對象。
您可以使用 Collections.binarySearch 來查找元素,然后在返回的索引上調用 remove。
請參閱此處的 Collections.binarySearch 文檔: http : //docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#binarySearch%28java.util.List,%20java.lang。對象%29
這將需要 ArrayTest 對象實現 .equals 。 您還需要調用 Collections.sort 來對列表進行排序。 最后,ArrayTest 必須實現 Comparable 接口,這樣 binarySearch 才能正確運行。
這是在 Java 中執行此操作的“正確”方法。 如果您只是想以一種快速而骯臟的方式解決問題,那么您可以遍歷元素並刪除具有您正在尋找的屬性的元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.