Java 如何检索密钥&;hashmap中的值

Java 如何检索密钥&;hashmap中的值,java,collections,map,hashmap,Java,Collections,Map,Hashmap,我试图通过对象将值插入哈希映射,我想检查这些值是否插入哈希映射。所以我使用这段代码,但在运行时我无法获得任何输出 如何解决这个问题 代码: import java.util.*; 导入java.io.*; 导入java.lang.*; 公共类任务列表 { 私有静态HashMap dataz=newhashmap(); 私有静态HashMap screen_dataz=newhashmap(); 公共最终静态对象[][]longValues={{“10”,“kstc proc”,“10.10

我试图通过对象将值插入哈希映射,我想检查这些值是否插入哈希映射。所以我使用这段代码,但在运行时我无法获得任何输出

如何解决这个问题

代码:

import java.util.*;
导入java.io.*;
导入java.lang.*;
公共类任务列表
{   
私有静态HashMap dataz=newhashmap();
私有静态HashMap screen_dataz=newhashmap();
公共最终静态对象[][]longValues={{“10”,“kstc proc”,“10.10.10.10.”,“5”,“O”},{“11”,“proc-lvk1”,“12.1.2.”,“4”,“O”},{“13”,“trng-lvk1”,“4.6.1.”,“3”,“O”};
私有静态字符串sl、pid、tid、mval、状态;
公共静态void main(字符串参数[])
{
addTask();
}
公共静态void addTask()
{  

对于(int k=0;k代码中的一个更正:

您可能需要更新for循环

作为


对于(int k=0;k首先,必须向映射中添加一行
longValues
矩阵,而不是整个矩阵:

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

您的代码有一些修复/改进:

  • 使用泛型时不要使用强制转换
  • screen\u dataz
    添加元素的循环总是添加相同的对象
  • 映射中存储的值是一个数组,这意味着只需调用
    toString()

    公共类任务列表{
    私有静态HashMap dataz=newhashmap();
    私有静态HashMap screen_dataz=newhashmap();
    公共最终静态字符串[][]长值={
    {“10”,“kstc proc”,“10.10.10.10.”,“5”,“O”},
    {“11”,“proc-lvk1”,“12.1.2”,“4”,“O”},
    {“13”,“trng-lvk1”,“4.6.1.”,“3”,“O”};
    私有静态字符串sl、pid、tid、mval、状态;
    公共静态void main(字符串参数[]){
    addTask();
    }
    公共静态void addTask(){
    for(int k=0;k

首先,将
for
循环更改为
screen\u dataz
,如下所示

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

这将正确地打印您的值。

关于这段代码有很多值得评论的地方

首先,参数化类型的通用参数不正确。映射当前正在存储
map
,但是
Object[]][]
类型的对象被添加到
map
中。我假设您希望在
映射中将每个
对象[]
作为单独的
条目输入

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

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

}
import java.util.HashMap;
导入java.util.Iterator;
导入java.util.Map;
导入java.util.Map.Entry;
导入java.util.Set;
公共类任务列表
{   
私有静态HashMap dataz=newhashmap();
私有静态HashMap screen_dataz=newhashmap();
公共最终静态对象[][]longValues={{“10”,“kstc proc”,“10.10.10.10.”,“5”,“O”},{“11”,“proc-lvk1”,“12.1.2.”,“4”,“O”},{“13”,“trng-lvk1”,“4.6.1.”,“3”,“O”};
私有静态字符串sl、pid、tid、mval、状态;
公共静态void main(字符串参数[])
{
addTask();
}
公共静态void addTask()
{  

对于(int k=0;k,我认为在循环中使用
screen_dataz.put(k,longValues[k]);
将对您有所帮助。
您也可以使用迭代器来实现此目的。

在循环中,您应该执行
screen_dataz.put(k,longValues[k]);
再次查看您的
HashMap
,您就会明白原因。请使用泛型以避免由于错误的类型转换而导致的潜在错误。99%的时间使用对象是错误的。您一直使用对象[]在这种情况下,它们似乎实际上是字符串[],正如您在前面的问题中所提出的:Java是一种OOP语言。如果您开始使用自定义类,您将生成更易于编写和维护的代码。
Object
Object[]
Object[]
都是非常糟糕的设计决策(在大多数情况下——在您的情况下肯定是这样).+1-这解决了大多数问题。您仍然可以将
对象
更改为
字符串
。@Andreas我做了,但恢复了此更改,认为OP选择
对象
而不是
字符串
,可能是有原因的,如果不是这样,那么就用
字符串
替换
对象
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 (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();
    for (int k=0; k<longValues.length; k++)
    {
    screen_dataz.put(k,longValues[k]);
    }
    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());
            }
        }
    }

}