我必须将值存储到包含三个值的列表/映射中:
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的最佳方法是什么?
答案 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
的两个“相等”值在实践中可能不相等,因此您将获得重复的条目。