Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个值的Java映射:容器类还是多个映射?_Java_Performance_Dictionary - Fatal编程技术网

具有多个值的Java映射:容器类还是多个映射?

具有多个值的Java映射:容器类还是多个映射?,java,performance,dictionary,Java,Performance,Dictionary,我正在尝试创建一个映射,其中UUID键指向一个对象(例如一些用户类实例)和关于该对象的辅助信息(例如int和字符串)。这有两种明显的实现方式: import java.util.Map; 导入java.util.HashMap; 导入java.util.UUID; ... Map main=newhashmap(); Map aux1=新HashMap(); Map aux2=新的HashMap(); 或 import java.util.Map; 导入java.util.HashMap; 导

我正在尝试创建一个映射,其中UUID键指向一个对象(例如一些
用户
类实例)和关于该对象的辅助信息(例如
int
字符串
)。这有两种明显的实现方式:

import java.util.Map;
导入java.util.HashMap;
导入java.util.UUID;
...
Map main=newhashmap();
Map aux1=新HashMap();
Map aux2=新的HashMap();

import java.util.Map;
导入java.util.HashMap;
导入java.util.UUID;
...
私有静态类UserInfo{//嵌套类
公共最终用户;
公开最终int aux1;
公共最终字符串aux2;
公共用户信息(用户用户,int aux1,字符串aux2){
this.user=用户;
这是aux1=aux1;
这是aux2=aux2;
}
}
...
Map main=newhashmap();

在效率和内存使用方面,通常认为哪个性能更好?还是有更值得选择的第三种方法?

这是一个主观的话题-评估以下因素

  • 信息安全(就因为你提到了用户)-你能把所有的信息放在一起吗
  • 取决于您对这些地图所做的操作,以及是否可能由于后期处理而出现问题

  • 否则,通常第二个选项(UserInfo类)是一个好主意。

    对于内存和效率,我认为第二个选项是更好的解决方案。第一种解决方案是创建更多使用内存的
    映射
    ,并存储使用内存的相同
    UUID

    它的可维护性和可读性也更好,除非毫秒级的性能至关重要,否则这是其中更重要的。如果将相关信息捆绑在一起,则更容易确定从何处获得信息及其描述的内容

    还要考虑项目的未来发展,例如为用户添加另一个描述符,如
    aux3
    。对于第一个示例,您需要添加另一个hashmap,请记住添加到新的hashmap,并记住在从其他hashmap中提取数据时从中提取数据。这将为初始设置和访问创建大量样板文件

    uuid=//一些uuid
    Map aux3=新的HashMap();
    //一些代码
    aux3.put(uuid,1.0);
    //一些代码。。。
    aux3.get();
    

    但使用composition方法,您只需要记住添加class属性(带有继承者和变体),就可以在任何地方自由使用这些属性。无论何时从用户映射访问,您只需要我调用
    get(uuid)
    ,您就可以访问所有相关数据。

    内部类将减少内存,并且可能更易于使用,可读性更强,速度更快,因为您只需执行一次查找(虽然不像hashmap那么大,但另一方面,为每个新值创建一个新的容器对象难道不比直接将值添加到基础数组更浪费吗?显然,这就是为什么LinkedList通常比ArrayList占用更多内存,尽管ArrayList有剩余容量;最终K键;V值;节点下一步;你说的“做你正在做的事”是什么意思?我还没有实现这些可能性中的任何一个。值得一提的是,这是一个单独的项目&将来其他人看到这段代码的可能性很小,但不管怎样,关于直观性和可维护性,您可能是对的。尽管值得一提的是,在第一个解决方案中,我非常确定多个映射只会存储对同一UUID的多个引用,而不是它们的多个副本。它会存储引用,但引用仍然使用内存,如果内存使用率低是一个优先事项,那么每一点都会有所帮助。即使是单独的项目,帮助您的未来,使重构和实践良好设计变得容易