嵌套地图或等效于存储三元组

时间:2013-05-13 17:28:56

标签: java map nested-lists

我必须将值存储到包含三个值的列表/映射中:

size  |   amount |  description
2,34  |     4    |  "I'm a long String"
1,14  |     2    |  "I'm another long String"

所以我考虑使用嵌套的Map,如:

        Map<Double, Map<Integer,String>> a = new HashMap<Double, Map<Integer,String>>();

但是如何轻松地向该地图添加条目? 像

这样的语法
a.put(1,43, new Map.Entry<>(7,"9890"));

不起作用,因为Map是抽象的。获取嵌套Map的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

这将是乏味的:

Map<Integer,String> val1 = a.get(2.34);
if (val1 == null) {
    val1 = new TreeMap<Integer, String>();
    a.put(2.34, val1);
}
val1.put(4, "I'm a long String");

我已经更新它到TreeMap,因为你想访问最小的元素。您还应该将地图“a”更改为TreeMap。

编辑2

我在这里努力,希望这是你正在寻找的东西:)

import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;

public class Main {

    public static void main(String[] args) throws IOException {
        TreeMap<Double, TreeMap<Integer, String>> map = new TreeMap<>();
        add(2.5, 5, "wrong value 1", map);
        add(3, 2, "wrong value 2", map);
        add(2.5, 3, "good value", map);

        System.out.println(map.pollFirstEntry().getValue().pollFirstEntry().getValue());
    }
    public static void add(double val1, int val2, String val3, TreeMap<Double, TreeMap<Integer, String>> map) {
        TreeMap<Integer,String> subMap = map.get(val1);
        if (subMap == null) {
            subMap = new TreeMap<Integer, String>();
            map.put(val1, subMap);
        }
        subMap.put(val2, val3);
    }

}

答案 1 :(得分:0)

只需定义一个Entry类:

final class Entry {
    final int amount;
    final String description;

    Entry(final int amount, final String description) {
        // check parameters
        this.amount = amount;
        this.description = description;
    }


    // implement getAmount
    // implement getDescription
}

并且地图的类型是

Map<Double, Entry>

答案 2 :(得分:0)

正如@Sotirios Delimanolis所提到的,你应该为你的三重奏创建课程,并根据你的需要选择收藏。如果您只想存储对象,然后可能迭代它们,请使用List。如果您必须使用简单或复杂的唯一密钥Map来允许访问您的对象。

但要小心:永远不要使用Double作为Map的关键字。类型double的两个“相等”值在实践中可能不相等,因此您将获得重复的条目。