我正在尝试删除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.
答案 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。