簡體   English   中英

如何從hashmap中檢索鍵和值

[英]How to retrieve key & values from hashmap

我試圖通過對象將值插入哈希映射,我想檢查是否將值插入到哈希映射中。 所以我使用此代碼但在運行時我無法獲得任何輸出。

怎么解決這個?

碼:

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);
        }
    }
}

首先,您必須將一行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();
 }

您的代碼有一些修復/改進:

  • 使用泛型時不要使用cast
  • screen_dataz添加元素的循環總是添加相同的對象
  • 存儲在地圖中的值是一個數組,這意味着它不會像您期望的那樣通過簡單調用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)); } } } 

代碼中的一處更正:

您可能想要更新for循環

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

首先,更改你的for循環以填充到這樣的screen_dataz

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

接下來,進行以下更改: -

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

這將正確打印您的價值。

關於這段代碼的評論相當多。

首先,參數化類型的泛型參數不正確。 地圖當前正在存儲Map<Long,Object[]>但是Object[][]類型的Object[][]被添加到Map 我假設您想要將每個Object[]作為Map的單獨Entry

    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());
            }
        }
    }

}

我想使用screen_dataz.put(k,longValues[k]); 在一個循環中將幫助你。 你也可以使用Iterator。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM