2014-12-12 1 views
0

Я пытаюсь получить индекс определенного значения Long, которое хранится в ArrayList. Но вот что происходит:Использование indexOf в ArrayList типа Long возвращает -1, несмотря на объект, существующий в списке

enter image description here

Dex присваивается значение -1 - как я понимаю, означает, что объект не существует в этом ArrayList. Но это действительно так. Вот как я знаю:

enter image description here

Таким образом, значение Dex должно быть присвоено значение 0.

Где я Мессинг?

Редактировать: nums также является архаистом типа Long.

ответ

5

Он делает что? nums.get(0) - это java.lang.String, как указано на скриншоте, а longList.get(0) - это java.lang.Long.

Это не тот же объект, действительно nums.get(0).equals(longList.get(0)) == false. Вы должны преобразовать String к Long (через Long.parseLong, например), а затем искать результирующее значение внутри longList

+0

'nums' также является архаистом типа Long. – user4351462

+2

Затем, где-то в вашем коде, тип безопасности разбивается через отражение или явные приведения или необработанные типы. В противном случае 'nums.add (" 1008 ")' поднимет ошибку компиляции. – Jack

+0

Помните, что 'nums' не может быть' ArrayList 'во время выполнения. Java имеет стирание типа, 'ArrayList' всегда является' ArrayList 'во время выполнения. Дженерики - это способ предотвратить вас от ситуации, в которой вы испытываете: сохранение безопасности типа при работе с универсальными контейнерами. – Jack

0

Так какой тип nums.get(). Если он не возвращает длинный тип. Вы можете использовать его в длинном типе. Но это не очень хороший вариант. вы также можете использовать Wrapperclass Long и его метод Long.parseLong.

0

nums - это ArrayList объектов типа String, тогда как longList является ArrayList объектов типа Long. Поэтому оператор longList.indexOf(nums.get(i)) будет сравнивать объект String с длинным объектом, который он никогда не найдет.

Попробуйте наложить строчку на длинный, например. int dex = longList.indexOf(Long.valueOf(nums.get(i)));

Смежные вопросы