2010-02-17 2 views
1

나는 다음과 같은 코드 조각이 : 그게 내가 수행에 채워 보는 것을 값자바 해시 맵 값을 다시 해쉬 한 후에 사라 졌나요?

private static HashMap<String, TestObject> labelHash= new HashMap<String, TestObject>(); 
    private static HashMap<String, TestObject> valueHash= new HashMap<String, TestObject>(); 

    private HashMap getChildrenInHash(int opt){ 
//  HashMap labelHash= new HashMap(); 
//  HashMap valueHash= new HashMap(); 

     if (valueHash.isEmpty() && labelHash.isEmpty()) {   

       if(getLabel().isShowing()){ 
        TestObject[] tempArray = getLabel().getMappableParent().getMappableChildren(); 
        for(int i =1; i < tempArray.length-2;i++){ 
         if(tempArray[i]==null) 
          break; 
         if(tempArray[i].getProperty("text").toString().compareTo(" ")==0){ 
          i+=1; 

         } 
         labelHash.put((String)tempArray[i].getProperty("text"),(tempArray[i])); 

         valueHash.put((String)tempArray[i].getProperty("text"),(tempArray[i+1])); 
         i+=2; 
       } 
       //System.out.println("finished filling the hashes");     
       } 
      }    

     } 

     if(opt ==1) 
      return labelHash; 
     else 
      return valueHash; 

    } 

나중에 그것의 값을 얻기 위해 기본적으로 궁극적 후 처음 HashMaps을을 채우기 위해이 방법을 사용하지만, 문제를 검색을 위해 더 이상 존재하지 않습니다 (전부는 아니지만 일부). 무슨 일 이니? 그들이 어떻게 길을 잃었는지, 디버거로 확인하고 값을 하나 하나봤을 때 삽입되었지만, 더 이상 존재하지 않는다면 어떤 생각이 들었습니까?

+1

getChildrenInHash 메서드를 어떻게 호출하고 메서드에서 반환 한 결과 (HashMap)를 저장하고 있습니까? 그것을 보여주는 코드 스 니펫을 추가 할 수 있습니까? – sateesh

+0

여기 호출 방법이 getChieldrenInHash() 공개 WLabel getFlashCopyTargetCapacityLabel() { \t \t의 HashMap labelHash = getChildrenInHash (1); \t \t 새로운 WLabel ((TestObject) labelHash.get ("FlashCopy Target Capacity")); \t 코드 스타일을 사용하여 포맷 할 수없는 몇 가지 이유 때문에 저를 비난하지 마십시오. – Tiberiu

답변

1

TestObject 님과 함께 무엇을하고 있습니까?

HashMap (일반적으로 컬렉션)은 내용의 새 사본이 아닌 참조를 저장합니다. 그것은 String과 같은 변경 불가능한 클래스에서는 괜찮지 만 변경 불가능한 클래스에서는 원래 참조를 통해 이러한 오브젝트 내용을 수정할 수 있습니다.

+0

예, 결국 위젯에 따라 값을 꺼내고 있습니다. 자동 UI 테스트를위한 것입니다. – Tiberiu

0

채울 때 다른 키 (항상)를 사용합니까? 항상 동일한 키를 사용하면 마지막으로 삽입 된 값만 찾습니다.

+0

거의 항상 동일한 값을 갖지만 때로는 거의 다를 수 없습니다 (하나의 런타임에서 다른 런타임까지). – Tiberiu

관련 문제