首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java内存:优化

Java内存:优化
EN

Stack Overflow用户
提问于 2018-05-29 11:36:53
回答 2查看 895关注 0票数 3

我想知道是否有更有效的方法来处理散列映射。

我有下面的Map (主),它由它的键和另一个Map作为值组成。

代码语言:javascript
复制
   final Map<String,Map<Boolean,String>> primaryMap = new HashMap<>();
     Map<Boolean,String> secondaryMap = new HashMap<>();

对于我分配的每个键,我分配了2个secondaryMaps,并初始化了二级映射again.The序列,类似于下面显示的序列:

代码语言:javascript
复制
 secondaryMap = new HashMap<>();
       secondaryMap.put(true, "A");
       primaryMap.put("DOG", listedMap);

        secondaryMap.put(false, "B");
        primaryMap.put("DOG", listedMap);

 secondaryMap = new HashMap<>();

        secondaryMap.put(true, "C");
        primaryMap.put("CAT", listedMap);

        secondaryMap.put(false, "D");
        primaryMap.put("CAT", listedMap);

是否有更有效的方法来做到这一点?在调用secondaryMap.clear()之前,secondaryMap = new HashMap<>();对内存有影响吗?

事先非常感谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-29 11:45:01

在内部Map只能有两个键的情况下,您可以用一个自定义类替换它:

代码语言:javascript
复制
final Map<String,Map<Boolean,String>> primaryMap = new HashMap<>();

可以是:

代码语言:javascript
复制
final Map<String, Foo> map = new HashMap<>();

你可以填充它,比如:

代码语言:javascript
复制
 map.put("DOG", new Foo("A", "B"));

其中Foo构造函数可以是:

代码语言:javascript
复制
public Foo(String valueForTrue, Sting valueForFalse){
   this.valueForTrue = valueForTrue;
   this.valueForFalse = valueForFalse;
}

--它将节省一些内存(因为所需的对象要少得多),但总的来说,它将使您的代码更加清晰。

当然,如果您可能只为String情况的true添加false值,那么您可以在Foo中选择工厂而不是公共构造函数,例如:

代码语言:javascript
复制
private Foo(){
}

public static Foo ofTrue(String valueForTrue){
   Foo foo = new Foo();
   foo.valueForTrue = valueForTrue;
   return foo;
}

public static Foo ofFalse(String valueForFalse){
   Foo foo = new Foo();
   foo.valueForFalse = valueForFalse;
   return foo;
}

public static Foo of(String valueForTrue, Sting valueForFalse){
   Foo foo = new Foo();
   foo.valueForTrue = valueForTrue;
   foo.valueForFalse = valueForFalse;
   return foo;
}
票数 3
EN

Stack Overflow用户

发布于 2018-05-29 11:43:22

不确定这是您的代码,还是仅仅是复制/粘贴问题,但看起来您在以下方面会更有效:

代码语言:javascript
复制
 secondaryMap = new HashMap<>();
 secondaryMap.put(true, "A");
 secondaryMap.put(false, "B");
 primaryMap.put("DOG", secondaryMap);

secondaryMap.clear()在您的new之前也将清除您放置在主目录中的映射--它们是,相同的对象

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

https://stackoverflow.com/questions/50583408

复制
相关文章

相似问题

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