Как удалить конкретный объект из ArrayList в Java? - PullRequest
19 голосов
/ 15 декабря 2011

Как я могу удалить конкретный объект из 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;
    }
}

Как я могу удалить объект с new ArrayTest(1) из моего ArrayList<ArrayList>

Ответы [ 13 ]

28 голосов
/ 15 декабря 2011

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;
}
11 голосов
/ 15 декабря 2011

Как правило, объект может быть удален двумя способами из ArrayList (или вообще любого List) по индексу (remove(int)) и по объекту (remove(Object)).

В этом конкретном сценарии: Добавьте метод equals(Object) в ваш класс ArrayTest. Это позволит ArrayList.remove(Object) идентифицировать правильный объект.

9 голосов
/ 25 января 2018

Если вы используете Java 8:

test.removeIf(t -> t.i == 1);

В Java 8 есть метод removeIf в интерфейсе коллекции. Для ArrayList он имеет расширенную реализацию (порядок n).

3 голосов
/ 17 января 2018

Для удаления конкретного объекта из arrayList есть два способа. Вызовите функцию arrayList.

  1. Удаление на основе объекта.
arrayList.remove(object);

Это удалит ваш объект, но в большинстве случаев, когда arrayList содержит элементы UserDefined DataTypes, этот метод не даст вам правильный результат. Он отлично работает только для примитивных типов данных. Поскольку пользователь хочет удалить элемент на основе значения поля объекта, и это нельзя сравнить с помощью функции удаления автоматически.

  1. Удаление на основе указанной позиции индекса в arrayList. Лучший способ удалить любой элемент или объект из arrayList. Сначала найдите индекс элемента, который вы хотите удалить. Затем вызовите этот метод arrayList, этот метод удалит элемент на основе индекса. И это даст правильный результат.
arrayList.remove(index);  
1 голос
/ 15 июля 2018

Вот полный пример.мы должны использовать метод итератора 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 + "]";
    }

}

Working demo Screen

1 голос
/ 15 декабря 2011

А.В.Алчев прав. Более быстрым решением было бы проанализировать все элементы и сравнить по уникальному свойству.

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;
    }

}

Это быстрое решение. Вам лучше реализовать сравнение объектов для более крупных проектов.

1 голос
/ 15 декабря 2011

используйте этот код

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.
0 голосов
/ 10 января 2019

Я пробовал это, и это работает для меня:

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;
    }
}
0 голосов
/ 05 июня 2018
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();
    }
}
0 голосов
/ 19 апреля 2018

Если вы хотите удалить несколько объектов, соответствующих этому свойству, попробуйте это.

Я использовал следующий код для удаления элемента из массива объектов, который мне помог.

В целом объектможно удалить двумя способами из ArrayList (или вообще из любого списка), index (удалить (int)) и 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();
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...