2013-06-27 4 views
3

개체를 통해 해시 맵에 값을 삽입하려고하는데 해시 맵에 값이 삽입되어 있는지 확인하고 싶습니다. 그래서이 코드를 사용하고 있지만 런타임에 어떤 출력을 얻을 수 없습니다.해시 맵에서 키와 값을 검색하는 방법

해결 방법?

코드 :

코드에서
import java.util.*; 
import java.io.*; 
import java.lang.*; 

public class TaskList 
{ 

    private static HashMap<Integer, Object[]> dataz = new HashMap<Integer,Object[]>(); 
    private static HashMap<Integer, Object[]> screen_dataz = new HashMap<Integer,Object[]>(); 
    public final static Object[][] longValues = {{"10", "kstc-proc", "10.10.10.10.10.","5","O"},{"11", "proc-lvk1", "12.1.2.","4","O"},{"13", "trng-lvk1", "4.6.1.","3","O"}}; 
    private static String sl,pid,tid,mval,status; 

    public static void main(String args[]) 
    { 
     addTask(); 
    } 

    public static void addTask() 
    { 
     for (int k=0; k<longValues.length; k++) 
     { 
     screen_dataz.put(k,longValues); 
     } 
     Set mapSet = (Set) screen_dataz.entrySet(); 
     Iterator mapIterator = mapSet.iterator(); 
     while (mapIterator.hasNext()) 
     { 
     Map.Entry mapEntry = (Map.Entry) mapIterator.next(); 
     String keyValue = (String) mapEntry.getKey(); 
     String value = (String) mapEntry.getValue(); 
     System.out.println(value); 
     } 
    } 
} 
+1

루프에서'screen_dataz.put (k, longValues ​​[k]);'다시'HashMap'을 보시면 왜되는지 이해하게 될 것입니다. – Maroun

+7

잘못된 typecasting으로 인한 잠재적 인 오류를 피하려면 제네릭을 사용하십시오. – jlordo

+1

개체를 사용하는 시간의 99 %가 잘못되었습니다. 항상 Object []를 사용한 적이 있습니다.이 경우 실제로 String []이됩니다. –

답변

5

먼저 업데이트 할 수 있습니다

, 당신이 행을 추가해야합니다 longValues 행렬의 전체 행렬이 아니라 전체 행렬 :

for (int k=0; k<longValues.length; k++) 
{ 
    screen_dataz.put(k,longValues[k]); 
} 
반복하는이 Object[]로 값을 추출하는 동안 다음

, 그리고 String 및 키 몇 가지 수정/개선 사항 Integer

while (mapIterator.hasNext()) 
{ 
    Map.Entry mapEntry = (Map.Entry) mapIterator.next(); 
    Integer keyValue = (Integer) mapEntry.getKey(); 
    Object[] value = (Object[]) mapEntry.getValue(); 
    //iterate over the array and print each value 
    for (int i=0; i<value.length; i++) { 
     System.out.print(value[i] + " "); 
    } 
    System.out.println(); 
} 
1

한 보정 : 당신은 당신의 루프

for (int k=0; k<longValues.length; k++) 
    { 
    screen_dataz.put(k,longValues[k]); 
    } 
5

귀하의 코드로 :

  • 사용하지 않는 제네릭을 사용할 때 캐스팅
  • 루프를 추가하는 요소는항상 같은 객체를 추가했다
  • 지도에 저장된 값은 당신이 toString()

    public class TaskList { 
        private static HashMap<Integer, String[]> dataz = new HashMap<Integer, String[]>(); 
        private static HashMap<Integer, String[]> screen_dataz = new HashMap<Integer, String[]>(); 
        public final static String[][] longValues = { 
          { "10", "kstc-proc", "10.10.10.10.10.", "5", "O" }, 
          { "11", "proc-lvk1", "12.1.2.", "4", "O" }, 
          { "13", "trng-lvk1", "4.6.1.", "3", "O" } }; 
        private static String sl, pid, tid, mval, status; 
    
        public static void main(String args[]) { 
         addTask(); 
        } 
    
        public static void addTask() { 
         for (int k = 0; k < longValues.length; k++) { 
          screen_dataz.put(k, longValues[k]); 
         } 
         Set<Entry<Integer, String[]>> mapSet = screen_dataz.entrySet(); 
         Iterator<Entry<Integer, String[]>> mapIterator = mapSet.iterator(); 
         while (mapIterator.hasNext()) { 
          Entry<Integer, String[]> mapEntry = mapIterator.next(); 
          Integer keyValue = mapEntry.getKey(); 
          String[] value = mapEntry.getValue(); 
          System.out.println(Arrays.toString(value)); 
         } 
        } 
    } 
    
+1

+1 - 대부분의 문제를 해결합니다. 그래도'Object'를'String'으로 변경할 수 있습니다. –

+0

@Andreas이 변경 사항을 되돌려 보았습니다. OP가 OPTIONS에서 'String'을 통해 Object를 선택한 이유가 있을지도 모른다고 생각했습니다. 그렇지 않으면 Object를 String으로 바꿉니다. –

0

처음에 간단한 호출 예상대로 인쇄되지 않습니다 의미 배열은, 변경하려면 for 루프를 이와 같이 screen_dataz으로 채 웁니다.

String keyValue = mapEntry.getKey().toString(); 
String value = Arrays.asList((Object[])mapEntry.getValue()).toString(); 

이 제대로 값을 출력합니다 -이 :

for (int k=0; k<longValues.length; k++) 
{ 
    screen_dataz.put(k,longValues[k]); 
} 

다음으로, 아래 변경합니다.

0

이 코드에 대해 언급 할 것이 많습니다.

먼저 매개 변수가있는 형식의 일반 인수가 올바르지 않습니다. 지도에 현재 Map<Long,Object[]>이 저장되어 있지만 Object[][] 유형의 개체는 Map에 추가됩니다. 각각 Object[]을 으로 입력하고 Map에 입력한다고 가정합니다.

for (int k=0; k<longValues.length; k++) 
    { 
    screen_dataz.put(k,longValues[k]); 
    } 

두 번째 부분은 Map 항목에 대한 반복입니다. Iterator 대신에 for..each 루프를 사용하십시오.

for(Entry<Integer,Object[]> entry: screen_dataz.entrySet()){ 
     //repetitive task 
    } 

최종 출력

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Map.Entry; 
import java.util.Set; 

public class TaskList 
{ 

    private static HashMap<Integer, Object[]> dataz = new HashMap<Integer,Object[]>(); 
    private static HashMap<Integer, Object[]> screen_dataz = new HashMap<Integer,Object[]>(); 
    public final static Object[][] longValues = {{"10", "kstc-proc", "10.10.10.10.10.","5","O"},{"11", "proc-lvk1", "12.1.2.","4","O"},{"13", "trng-lvk1", "4.6.1.","3","O"}}; 
    private static String sl,pid,tid,mval,status; 

    public static void main(String args[]) 
    { 
     addTask(); 
    } 

    public static void addTask() 
    { 
     for (int k=0; k<longValues.length; k++) 
     { 
     screen_dataz.put(k,longValues[k]); 
     } 

     for(Entry<Integer,Object[]> entry: screen_dataz.entrySet()){ 
      System.out.println(entry.getKey()); 
      for(Object obj: entry.getValue()){ 
        System.out.println(obj.toString()); 
      } 
     } 
    } 

} 
0

나는 당신을 도울 것입니다 루프에서 screen_dataz.put(k,longValues[k]);를 사용하여 생각합니다. 당신은 또한 이것을 위해 반복자를 사용할 수 있습니다.

관련 문제