Java - 如何放入多维HashMap

时间:2015-08-01 21:14:38

标签: java nullpointerexception hashmap

我有这个三维HashMap。

   private HashMap<Integer, HashMap<Integer, HashMap<Integer, Chunk>>> chunks = new HashMap<Integer, HashMap<Integer, HashMap<Integer, Chunk>>>();

当我使用它来放入'Chunk'时,我得到一个NullPointerException。

chunks.get(x).get(y).put(z, new Chunk(x, y, z, param1, param2));

有什么问题?

2 个答案:

答案 0 :(得分:1)

初始化时,只需初始化“外部”地图。这是你必须做的:

fs.mkdirs(filenames[i], function (err) {

  if (!err){
    fs.writeFile(filenames[i]+'/'+filenames[i]+'.html', 'hello world' , function( error ){
      console.log(error);

    });
  }

});

请注意,您应尽可能使用“Map”接口而不是实现“HashMap”。

答案 1 :(得分:1)

重新建模您的应用程序。

使用三级HashMaps意味着同时处理三个抽象级别。这非常乏味且容易出错。

如果您可以将结构规范化到足以仅需要两个级别,则可以使用Google的Table中的Guava library数据结构,这是一个二维地图的Facade。这个数据结构已经解决了为您创建和访问各个地图层次结构的问题,因此您可以专注于您的课程实际上想要做的事情。

如果您不想使用外部库,则必须自己编写类似的数据结构。确保将其创建为核心应用程序之外的单独类/接口,并对其进行大量单元测试。但是将三层数据结构与核心业务逻辑混合意味着违反了Cohesion,这是面向对象设计的基本原则之一。