此问题已在此处找到答案:
java arraylist移除对象-indexoutofboundsexception(5个答案)
22小时前关门。
我对基本java感到困惑,因为我试图使用arraylist,但它不起作用,但一旦我切换到hashset,它就完美地工作了。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TestJava {
public static void main(String[] args) {
char p = 'p';
List<Character> list = new ArrayList<>();
list.add(p);
Set<Character> set = new HashSet<>();
set.add(p);
System.out.println(list.remove(p));
System.out.println(set.remove(p));
}
}
在上面的例子中,我在列表和集合中添加了一个字符,在我尝试从列表中删除相同的字符后,它失败了,出现了indexoutofbound异常,而集合工作了。
为什么列表不只是删除字符?
1条答案
按热度按时间monwx1rj1#
发生这种情况的原因如下:
Set
接口公开了一种方法,即boolean remove(Object o)
List
接口公开了两种方法,一种是E remove(int index)
另一个是boolean remove(Object o)
自从你p
是一个char
,就List
您与第一个方法冲突:编译器解释您传递的是int
(char的int值p
存在112
),并且由于您的列表在索引处没有任何元素112
,你要崩溃了。就
Set
不过,并没有这样的模糊性,所以它正在消除它。这是一个不不幸的案例。要停止编译器这样做,您必须按照@oh god spider的建议,将变量声明为boxed
Character
而不是原始的char
.