ArrayList无法删除Character

时间:2018-05-31 03:51:43

标签: java list arraylist integer character

我正在尝试删除ArrayList中的一个字符。但是我总是要构建一个要删除的对象,为什么我不能像添加Character那样删除?

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 :(得分:3)

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

答案 1 :(得分:0)

您还可以使用Character类的valueOf()方法来实现此目的,

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

对于你从被列表中移除对象的被调用方法,它的Alreday由Neng Liu解释,它被转换为int。