首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中使用多级HashMap的最佳实践

在Java中使用多级HashMap的最佳实践
EN

Stack Overflow用户
提问于 2015-07-15 13:53:29
回答 3查看 11.2K关注 0票数 5

我们有一种情况,我们最终使用多级散列映射;即,散列映射中的一个散列映射,深度为三到四级。

本能地,这让人感觉不对劲。我在这里读过关于如何迭代/使用多级散列映射的帖子,但几乎没有一个帖子提到了这方面的最佳实践。

为什么多级散列映射不好,如果有更好的设计,会是什么?

下面是我们拥有的多级散列映射的示例设计:

代码语言:javascript
运行
复制
Map<String, Object1> map1;

class Object1 {
    String version;
    Map<String,Object2> map2;
}

class Object2 {
    Map<String,List<Object3>> map4;
    Map<String,String> map5;
}
EN

回答 3

Stack Overflow用户

发布于 2015-07-15 13:59:50

只要对它们进行了适当的抽象,这并不是什么大问题,但在可读性方面,您会让自己陷入一些令人讨厌的兔子洞。如果没有抽象,维护它将成为一个噩梦,这是任何开发人员都不希望发生在另一个上的。

从本质上讲,您正在创建的是一个排序表;第一个键是访问更多列的主键。在简单的一层、两层或三层设计中,这并不可怕;您需要三个键才能获得单个值。如果有一个方便的方法来访问它,就像下面这样,这不是一个糟糕的想法(尽管有更好的方法)。

代码语言:javascript
运行
复制
public interface Table<K1, K2, K3, V> {
    V get(K1 key1, K2 key2, K3 key3);
}

...However,这完全取决于您实际对该数据结构做了什么。如果您发现自己正在尝试为值迭代中间键(也就是说,您正在查看键3以获取它和键5之间的所有值的集合),那么在这一点上您必须重新考虑业务逻辑。提供的数据结构不够灵活,不足以处理所有情况;或多或少,它用于基于一组值的简单索引。

或者,人们可以研究一下Guava Table,因为它可以做同样的事情,具有更好的接口(类似于我上面的那个)。

票数 4
EN

Stack Overflow用户

发布于 2015-07-15 14:05:46

我认为在HashMap中做HashMap是一种糟糕的做法,因为为了让你的HashMap更深入,会耗费你的时间和金钱。从3 level depth Map5 level depth Map,你必须重新编写你的类。当涉及到维护这个程序时,这将会带来大量的技术债务。

在某个地方声明初始Map

代码语言:javascript
运行
复制
Map<String, MyHashedObject> HashKVP = new HashMap<String, MyHashedObject>();

然后有一个Object来存储额外的地图。

代码语言:javascript
运行
复制
class MyHashedObject {

    private Map<String, MyHashedObject> InternalKvp;

    public MyHashedObject() {
        this.InternalKvp = new HashMap<String, MyHashedObject>();
    }

    /*
    * Get the next level of our MyHashedObject object
    * @param HashKey
    * @return MyHashedObject result
    */
    public MyHashedObject findHashedObject(String HashKey) {
        MyHashedObject result = null;
        if(this.InternalKvp.containsKey(HashKey)) {
            result = this.InternalKvp.get(HashKey);
        }
        return result;
    }




}

这只是一个非常基本的示例,但您可以向MyHashedObject添加更多属性(如depthparent_object等)。您可以执行类似Small-world network的操作来跟踪每个对象的depth

票数 2
EN

Stack Overflow用户

发布于 2015-07-15 14:04:11

多级HashMaps不一定不好,这取决于你的算法。不好的是,它更难管理。考虑对HasMap值使用接口(如存储库),这可能会使您的设计更简洁。另一种选择是在HashMap中使用组合键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31422443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档