为什么数组列表不能像hasset那样删除对象?

s6fujrry  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(301)

此问题已在此处找到答案

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异常,而集合工作了。
为什么列表不只是删除字符?

monwx1rj

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 .

相关问题