Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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;
}

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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.

Ответ 6

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

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

}

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

Ответ 7

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

вы можете указать, как вы управляете каждым объектом.

Ответ 8

Вы можете использовать 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.Object%29

Для этого потребуется объект ArrayTest для реализации .equals. Вам также потребуется вызвать Collections.sort для сортировки списка. Наконец, ArrayTest должен был реализовать интерфейс Comparable, чтобы binarySearch работал правильно.

Это "правильный" способ сделать это на Java. Если вы просто хотите быстро и грязно решить проблему, тогда вы можете просто перебирать элементы и удалять их с помощью атрибута, который вы ищете.

Ответ 9

Это помогло мне:

        card temperaryCardFour = theDeck.get(theDeck.size() - 1);
        theDeck.remove(temperaryCardFour);    

вместо

theDeck.remove(numberNeededRemoved);

У меня есть конформация удаления по первому фрагменту кода и конформация un remove на второй.

Попробуйте переключить свой код с первым фрагментом, который, я думаю, это ваша проблема.

Натан Нельсон

Ответ 10

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

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

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

Ответ 11

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

Ответ 12

Вот полный пример. мы должны использовать метод итератора удаления()

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

Ответ 13

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

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