首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制作地图的地图?

制作地图的地图?
EN

Stack Overflow用户
提问于 2016-10-08 13:20:12
回答 2查看 58关注 0票数 0

所以有3层。我有一个键,值对的映射,其中的值是另一个映射。第二个映射有键,值对,其中值就是值。

因此每个键都有另一个键与之配对,并且第二个键具有值。

这就是我所尝试的:

代码语言:javascript
复制
Map<Integer, Map<String, String>> multiMap = new HashMap<>();

例如:这是我需要放入map中的数据:

代码语言:javascript
复制
1 => fruit => apple 
  => color => red
  => day => friday

2 => fruit => orange
  => color => blue 
  => day => monday

3 => fruit => banana
  => color => red 
  => day => thursday

所以如果我使用Map<Integer, Map<String, String>> multiMap = new HashMap<>();

如果我想得到最喜欢的颜色2,我想做favColor2 = multiMap.get(2).get(color)或类似的东西。

这是最好的方法吗?向地图添加数据时遇到问题。

我不能添加这些数据。它会给出错误。所以我先尝试了multiMap.put(1, new HashMap<String, String>());,然后添加了“水果”,我尝试了multiMap.get(1).put(fruit, apple);,但它不起作用

EN

回答 2

Stack Overflow用户

发布于 2016-10-08 13:35:35

那得看情况。在您给出的示例中,似乎在第二个映射中总是有相同的键。如果是这样的话,我会建议使用对象来代替,以使其更容易阅读。第一次查看代码的新程序员可以通过这种方式更容易地理解它,这是一个很好的实践。我建议使用如下代码:

代码语言:javascript
复制
public enum Fruit {
    APPLE, ORANGE, BANANA;

    @Override
    public String toString(){
        // If needs be, override it and return a String for the fruit
    }
}

对日期和颜色执行相同的操作,然后创建值对象:

代码语言:javascript
复制
public class MapInfo{
    private Fruit fruit;
    private Color color;
    private Day day;

    public MapInfo(Fruit fruit, Day day, Color color){
        this.fruit = fruit;
        this.day = day;
        this.color = color;
    }

    // Create accessors here

    // Add a toString if needed
}

然后,您的Map对象将为

代码语言:javascript
复制
Map<Integer, MapInfo> map = new HashMap<>();
票数 4
EN

Stack Overflow用户

发布于 2016-10-08 13:48:23

我的意思是,你可以重新发明轮子,但你也可以使用Guava提供的MultiMap

在那里,您可以使用相同的键放置多个值,并对其进行修改。这可能是一种更干净的实现,而不是自己做这一切

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

https://stackoverflow.com/questions/39928954

复制
相关文章

相似问题

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