ArrayList не удалось удалить Character - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь удалить одного персонажа из моего ArrayList.Но мне всегда нужно создавать объект для удаления, почему я не могу удалить так, как я добавляю персонажа?

List<Character> list = new ArrayList<>();
list.add('z');
list.add('x');
list.add('y');
System.out.println("TEST1: " + list);
Character g = new Character('x');
list.remove(g);
System.out.println("TEST2: " + list);
list.remove('y');

The last line gives me these errors:

TEST1: [z, x, y]
TEST2: [z, y]
java.lang.IndexOutOfBoundsException: Index: 121, Size: 2
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.remove(ArrayList.java:492)

Документ Java здесь показывает: https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#remove-java.lang.Object-

boolean        add(E e)
               Appends the specified element to the end of this list.
boolean        remove(Object o)
               Removes the first occurrence of the specified element from this list, if it is present.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы также можете использовать метод valueOf () класса Character для достижения этого,

list.remove(Character.valueOf('x'));

Для вашего вызванного метода для удаления объекта из списка, его Alreday объясняется Ненг Лиу, егопревращается в int.

0 голосов
/ 31 мая 2018

ArrayList имеет две реализации для remove:

  • public boolean remove(Object o)
  • public E remove(int index)

Когда вы вызываете его:

list.remove(Character)

вы звоните

public boolean remove(Object o)

, чтобы он мог добиться успеха.

Но когда вы звоните по телефону:

list.remove('y');

char y будет преобразовано в int 121 (попробуйте это System.out.println((int) 'y');), вы косвенно звоните

public E remove(121)

, поэтому вы получаете IndexOutOfBoundsException

...