indexOf 에서 값을 못 찾는 경우(항상 -1을 리턴)
조회수 725회
이전에도 질문 올렸었는데 해보니 안되서 다시 올립니다...
먼저 방식은
- ArrayList>에 HashMap을 여러개 저장해 두었습니다.
- get()으로 그 중 HashMap을 하나 가져와서 또 get("key")로 value를 들고옵니다.
- 들고온 HashMap의 value를 ArrayList에서 indexOf로 위치를 구하면 항상 -1이 리턴됩니다.
ArrayList<HashMap<String,String>> al = new ArrayList<>();
al.add(hm); // hm은 HashMap<String,String> 형식
ArrayList<String,String> list = new ArrayList<>();
// list = [Value1, Value2]
...
HashMap<String,String> hm2 = al.get(0); // hm2 = {key1=Value1, key2=Value2}
Log.d("test",String.valueOf(list.indexOf(hm2.get("key1")))); // -1 참고로 hm2.get("key1")의 반환값도 Value1
Log.d("test",String.valueOf(list.indexOf("Value1"))); // 0
직접 체크도 해봤는데 hm2.get("key1")은 String으로 값을 반환하고 있습니다.
.getClass().getName()으로 확인
이런데 get으로 가져온걸 indexOf에 넣으면 -1을, 직접 반환값을 코드상에 넣으면 정상적으로 인덱스를 반환하는데 뭐가 문제인가요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
차라리 오류 재현이 가능한 full source code 를 올려주세요.
아래 코드는 잘못된거겠죠...
ArrayList<String,String> list = new ArrayList<>(); // 틀린코드
아래 예제를 보세요. 특이한 문제가 없습니다.
jshell> ArrayList<HashMap<String,String>> al = new ArrayList<>() al ==> [] jshell> HashMap<String,String> hm = new HashMap<>() hm ==> {} jshell> hm.put("key1", "test") $8 ==> null jshell> al.add(hm) $10 ==> true jshell> al al ==> [{key1=test}] jshell> HashMap<String,String> hm2 = al.get(0) hm2 ==> {key1=test} jshell> ArrayList<String> list = new ArrayList<>() list ==> [] jshell> list.add("test") $15 ==> true jshell> String.valueOf(list.indexOf(hm2.get("key1"))) $16 ==> "0"
댓글 입력