list的remove不能删除字符吗

###### 今天刷题的时候碰到一个小问题。大佬们帮我看看啥问题
public static void main( String args[]) {
//        System.out.println(findAnagrams("cbaebabacd", "abc"));
        ArrayList<Character> list = new ArrayList<>();
        list.add('a');
        list.add('b');
        list.add('c');
        list.remove('c');
        System.out.println(list);
    }
 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 99 out of bounds for length 3
去看了下源码,也没看出啥来。
这里不应该也有操作删除的内容的吗,为啥会一直默认使用索引删除?怎么样让它按元素删除呢?

img


这样就好了 他以为你调用的是list.remove(index) 这个方法

remove参数是表示索引,不是某个值
程序把 'c'看出ASCII码 99,认为你要删除第99个元素,所以下标越界报错了
需要先在list中循环搜索'c'字符,然后找到对应下标后remove该下标

可以通过字符删的,不过你这里比较特殊,编译过后认为‘c’是数字(大多数情况下都会这么认为),所以就remove99去了,如果是String类型就不会出现这个情况。试了下用包装类型的就可以删除了,可能因为是对象所以不会优化成ascii码。

List<Character> list = new ArrayList<>();
        list.add('a');
        list.add('b');
        Character c = new Character('b');
        list.remove(c);
        System.out.println(list);