如何从hashmap中检索键和值
我试图通过对象将值插入哈希映射,我想检查是否将值插入到哈希映射中。 所以我使用此代码但在运行时我无法获得任何输出。
怎么解决这个?
码:
import java.util.*; import java.io.*; import java.lang.*; public class TaskList { private static HashMap dataz = new HashMap(); private static HashMap screen_dataz = new HashMap(); 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
然后,迭代时将值提取为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
您的代码有一些修复/改进:
- 使用generics时不要使用强制转换
- 向
screen_dataz
添加元素的循环总是添加相同的对象 -
存储在地图中的值是一个数组,这意味着它不会像您期望的那样通过简单调用
toString()
来打印public class TaskList { private static HashMap
dataz = new HashMap (); private static HashMap screen_dataz = new HashMap (); 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 > mapSet = screen_dataz.entrySet(); Iterator > mapIterator = mapSet.iterator(); while (mapIterator.hasNext()) { Entry mapEntry = mapIterator.next(); Integer keyValue = mapEntry.getKey(); String[] value = mapEntry.getValue(); System.out.println(Arrays.toString(value)); } } }
代码中的一处更正:
您可能想要更新for循环
如
for (int k=0; k
首先,更改for
循环以填充到screen_dataz
就像这样。
for (int k=0; k
接下来,进行以下更改: -
String keyValue = mapEntry.getKey().toString(); String value = Arrays.asList((Object[])mapEntry.getValue()).toString();
这将正确打印您的价值。
关于这段代码的评论相当多。
首先,参数化类型的generics参数不正确。 地图当前存储Map
但是Object[][]
类型的Object[][]
被添加到Map
。 我假设您想要将每个Object[]
作为Map
的单独Entry
。
for (int k=0; k
要看的第二部分是对Map
条目的迭代。 而不是使用Iterator
使用for..each
循环。
for(Entry 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 dataz = new HashMap(); private static HashMap screen_dataz = new HashMap(); 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 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。