Удаление символа из ArrayList символов

Я столкнулся с этим нежелательным преобразованием char в int в цикле. Скажем, у меня есть этот список символов, и я хочу удалить один из них:

List<Character> chars = new ArrayList<>();
chars.add('a');
chars.add('b');
chars.add('c');
chars.remove('a');  // or chars.remove('a'-'0');

поэтому 'a' интерпретируется как значение int, и я получаю исключение IndexOutOfBoundsException. Есть ли какие-либо легкие способы решения этой проблемы?

Ответы

Ответ 1

A char продвигается до int, который имеет приоритет перед автобоксингом, поэтому remove(int) вызывается вместо remove(Object), вы можете интуитивно ожидать.

Вы можете принудительно вызвать "правильный" метод, поместив аргумент самостоятельно:

chars.remove(Character.valueOf('a'));

Ответ 2

Вам нужно передать его типу объекта, чтобы заставить компилятор выбрать remove(Object) вместо remove(int):

chars.remove((Character) 'a');

Ответ 3

Вы можете выполнить поиск по списку, где a окажется.

chars.remove(chars.indexOf('a'));