我有这个三维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));
有什么问题?
答案 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,这是面向对象设计的基本原则之一。