带字符串数组的HashMap和整数数组值不打印输出

时间:2016-11-24 09:02:17

标签: java

我希望使用Hashmap打印数组的值和键...但是我使用它来获取地址。

 import java.io.FileReader;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map.Entry;

import java.util.Set;
import au.com.bytecode.opencsv.CSVReader;
import java.util.Arrays;
import java.util.Collection;

public class ArrayHash

{
    public static void main(String args[]) throws IOException
    {
        int[] WorkingDay=new int[13];
        int i=0;
        String[] Name=new String[13];       
        String file="C:\\Users\\Dhananjay Kumar\\Empdetail\\Detail.csv";
        HashMap<String[],int[]> hashfunc=new HashMap<String[],int[]>();
        CSVReader reader=new CSVReader(new FileReader(file));
        String[] read;
        while((read = reader.readNext()) !=null)
        {
            WorkingDay[i]=Integer.parseInt(read[2]);
             Name[i]=read[0];
             i++;           
        }
        hashfunc.put(Name,WorkingDay);
        hashfunc.get(Name);
        Set<Entry<String[], int[]>> entrySet = hashfunc.entrySet();     
        for (Entry entry : entrySet)
        {
            System.out.println("key: " + entry.getKey() + " value: " + entry.getValue());           
        }   
    }
}

5 个答案:

答案 0 :(得分:1)

使用:

System.out.println("key: " + entry.getKey() + " value: " + Arrays.toString(entry.getValue()));  

答案 1 :(得分:0)

  

entry.getValue() 提供该数组的引用,而不是数组元素

使用 Arrays.toString((int[]) entry.getValue()) 以便打印值。 或使用for循环到数组长度并打印每个值

     for(Entry entry : entrySet) {
        int[] arrInt = (int[]) entry.getValue();
        String[] arrString = (String[]) entry.getKey();
        for(int j=0; j<arrInt.length; j++){
            System.out.println(arrInt[j]);
        }
     }

答案 2 :(得分:0)

hashfunc

将数组引用保存为键,因此打印地址。

for (Entry entry : entrySet)
    {
        System.out.println("key: " + entry.getKey() + " value: " + entry.getValue()); 
       String[] names=entry.getKey();
       for(String name:names){
         System.out.println(name);
       }
       int[] workingDays=entry.getValue();
       for(int workingDay:workingDays){
         System.out.println(workingDay);
       } 
    } 

答案 3 :(得分:0)

您正在尝试打印整个数组以获取entrySet中每个条目的值。

Array的默认toString()方法只返回对象的地址。因此,您需要使用其他方法,例如Arrays.toString(entry.getValue()),或创建自己的方法以您需要的格式打印数组。

答案 4 :(得分:0)

看起来好像你真的需要HashMap<String,Integer>类型的对象。此外,Java中有一个书面编码约定,它声明开头{应该与声明的声明位于同一行。我也没有找到它,但由于这是惯例,我遵循它。

public static void main(String args[]) throws IOException {    
    String file="C:\\Users\\Dhananjay Kumar\\Empdetail\\Detail.csv";
    HashMap<String,Integer> hashfunc=new HashMap<String,Integer>(); // !!!
    CSVReader reader=new CSVReader(new FileReader(file));
    String[] read;
    while((read = reader.readNext()) !=null) {
        haschfunc.put(read[0], Integer.parseInt(read[2])); // !!!
    }   
    for (Entry entry : hashfunc.entrySet()) {
        System.out.println("key: " + entry.getKey() + " value: " + entry.getValue());           
    }   
}