indexOf 에서 값을 못 찾는 경우(항상 -1을 리턴)

조회수 725회

이전에도 질문 올렸었는데 해보니 안되서 다시 올립니다...

먼저 방식은

  1. ArrayList>에 HashMap을 여러개 저장해 두었습니다.
  2. get()으로 그 중 HashMap을 하나 가져와서 또 get("key")로 value를 들고옵니다.
  3. 들고온 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"
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)