2014-12-12 3 views
0

ArrayList에 저장된 특정 Long 값의 인덱스를 검색하려고합니다. 그러나 여기에서 무슨 일이 일어나고있는 작업은 다음과 같습니다Long 형식의 ArrayList에서 indexOf를 사용하면 목록에있는 객체가 있더라도 -1이 반환됩니다.

enter image description here

덱스가 -1의 값을 할당 - 나는 객체가 ArrayList를 내에 존재하지 않음을 의미 이해합니다. 그러나 실제로는 그렇습니다.

enter image description here

그래서 할당해야 값 덱스가 0

어디 내가 어질러 오전 : 여기 내가 아는 방법은?

편집 : nums도 긴 유형의 arraylist입니다.

답변

5

무엇을할까요? nums.get(0)java.lang.String이며 화면에 표시되어 있으며 longList.get(0)java.lang.Long입니다.

그들은 같은 대상이 아닙니다. 실제로는 nums.get(0).equals(longList.get(0)) == false입니다. 당신은 (예를 들어 Long.parseLong 통해) LongString를 변환 한 후 longList

+0

'nums' 또한 Long 유형의 arraylist입니다. – user4351462

+2

그러면 코드의 어딘가에서 형식 안전이 리플렉션 또는 명시 적 캐스트 또는 원시 형식을 통해 손상됩니다. 그렇지 않으면'nums.add ("1008")'이 컴파일 에러를 일으킨다. – Jack

+0

'nums '는 런타임에'ArrayList '이 될 수 없다는 것을 명심하십시오. Java는 타입 소거가되어,'ArrayList'는 실행시에 항상'ArrayList '입니다. Generics는 발생하는 상황을 방지하는 방법입니다. 일반 컨테이너로 작업하는 동안 유형 안전성을 유지합니다. – Jack

0

내부의 결과 값을 검색 그래서 nums.get() 유형입니다해야합니다. 그것은 긴 타입을 반환하지 않습니다. 그것을 긴 유형으로 형변환 할 수 있습니다. 그러나 그것은 정말로 좋은 선택이 아니다. Wrapper 클래스 Long과 그 메소드 Long.parseLong을 사용할 수도 있습니다.

0

nums는 String 유형의 객체의 ArrayList이고 longList는 Long 유형의 객체의 ArrayList입니다. 따라서 문 longList.indexOf(nums.get(i))은 String 객체를 Long 객체와 비교합니다.이 객체는 절대로 발견되지 않습니다.

String을 Long으로 캐스팅 해보세요. 예 : int dex = longList.indexOf(Long.valueOf(nums.get(i)));

관련 문제