簡體   English   中英

如何從 Java 中的 ArrayList 中刪除特定對象?

[英]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的函數。

  1. 根據對象刪除。
arrayList.remove(object);

這將刪除您的對象,但在大多數情況下,當 arrayList 包含 UserDefined DataTypes 的項目時,此方法不會為您提供正確的結果。 它僅適用於原始數據類型。 因為用戶想根據對象字段值刪除項目,而刪除功能無法自動比較。

  1. 根據arrayList 的指定索引位置進行刪除。 從 arrayList 中刪除任何項目或對象的最佳方法。 首先,找到要刪除的項目的索引。 然后調用這個arrayList 方法,這個方法在索引的基礎上刪除項目。 它會給出正確的結果。
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM