Java:在HashMap中添加新项

时间:2014-03-07 17:56:06

标签: java hashmap

对于学校我必须制作一个程序,它将从文件中获取值,然后将其打印出来。我正在使用HashMap,因为它最适合存储我的数据。我遇到的问题是,当我尝试添加它时,我得到一个空指针。也许这是因为整数没有实例化,但我该怎么办呢? 这是我的代码:

public class Driver {

static ArrayList<Event> myEvents = new ArrayList<Event>();
static String[][][] counts = new String[50][1000][2];


//static ArrayList<int>[] myCounts = new ArrayList[];
//static ArrayList<String>[] myCountProfile = new ArrayList[];

@SuppressWarnings("unchecked")
static HashMap<String, Integer>[] count = new HashMap[50];

public static void main(String[] args) throws FileNotFoundException {
    // TODO Auto-generated method stub
    File input = new File("./src/Problem1/stormdata_2013.csv");
    Scanner fileRead = new Scanner(input);


    while (fileRead.hasNextLine()) {
        String currentLine = fileRead.nextLine();
        Scanner lineScan = new Scanner(currentLine).useDelimiter(",");

        // Dealing with unnecessary information
        for (int i = 0; i < 8; i++) {
            lineScan.next();
        }
        String state = lineScan.next().trim();
        int stateNum = Integer.parseInt(lineScan.next());
        lineScan.next();
        String month = lineScan.next().trim();
        String type = lineScan.next().trim();

        myEvents.add(new Event(type, month, state, stateNum));

        count[stateNum].put(type,count[stateNum].get(type)+1);
    }

}

}

4 个答案:

答案 0 :(得分:2)

您已经创建了一个HashMap s数组:

@SuppressWarnings("unchecked")
static HashMap<String, Integer>[] count = new HashMap[50];

...但该数组中的地图未初始化。您的数组只包含50个null引用。您需要先使用map对其进行初始化,然后再将其添加到其中。

if (count[stateNum] == null) {
    countNum[stateNum] = new HashMap<String, Integer();
}
count[stateNum].put(type,count[stateNum].get(type)+1);

另外,我建议你创建一个List<Map<String, Integer>>,而不是创建原始类型的数组。正如编译器所指出的那样,这确实不是类型安全的。

此外,你要使用String[][][]的事实清楚地表明你可能没有选择最好的数据结构,这可能对你有所帮助。我猜,你几乎肯定需要一个单独的课程。

答案 1 :(得分:0)

您甚至不创建单个HashMap。您为50个HashMaps创建一个数组。默认情况下,它包含50个空值,它必须包含50个新的HashMap对象。

此外,写String[2][50][1000]而不是String[50][1000][2]不浪费内存。 Explanation

答案 2 :(得分:0)

您已声明HashMap的数组,但尚未对其进行初始化。

static HashMap<String, Integer>[] count = new HashMap[50];

在使用之前,您需要初始化HashMap的所有元素

答案 3 :(得分:0)

要使用HashMap,您可以执行以下操作,并且永远不应该获得nullpointer异常:

static HashMap<String, Object[]>    hm  = new HashMap<String, Object[]>();

    public static void main( String[] args ) throws FileNotFoundException {

        File input = new File("./src/Problem1/stormdata_2013.csv");
        Scanner fileRead = new Scanner(input);

        while (fileRead.hasNextLine()) {
            String currentLine = fileRead.nextLine();
            Scanner lineScan = new Scanner(currentLine).useDelimiter(",");

            // Dealing with unnecessary information
            for (int i = 0; i < 8; i++) {
                lineScan.next();
            }
            String state = lineScan.next().trim();
            int stateNum = Integer.parseInt(lineScan.next());
            lineScan.next();
            String month = lineScan.next().trim();
            String type = lineScan.next().trim();

            Object[] obj = { stateNum, state, month };
            hm.put(type, obj);

    }