我遇到的情况是:我需要类似的东西:
197 => 6 (1 year)
197 => 12 (2 years)
想要根据订阅年份添加多个产品及其价格,价值会有所不同。
我想知道java中是否有任何支持重复键的数据结构(应该像map一样,但必须支持重复键)。
我可以通过创建一个类来做,但只是想知道是否有任何东西支持这个东西..它更像是一个MAP,但没有地图,因为它需要支持多个键。
答案 0 :(得分:6)
是的,您可以使用像番石榴这样的现有库来实现。以下是guava库link的接口MultiMap
的链接。这里有一个关于如何使用它的例子(取自here):
Multimap<String, String> myMultimap = ArrayListMultimap.create();
// Adding some key/value
myMultimap.put("Fruits", "Banana");
myMultimap.put("Fruits", "Apple");
myMultimap.put("Fruits", "Pear");
myMultimap.put("Vegetables", "Carrot");
// Getting the size
int size = myMultimap.size();
System.out.println(size); // 4
// Getting values
Collection<string> fruits = myMultimap.get("Fruits");
System.out.println(fruits); // [Bannana, Apple, Pear]
Collection<string> vegetables = myMultimap.get("Vegetables");
System.out.println(vegetables); // [Carrot]
第二种可能性是创建Map<String, List<Object>>
并手动处理对与单个键关联的对象列表的引用。
答案 1 :(得分:3)
有MultiMap但这看起来不是一个好的用例,你应该使用Map<Product, Map<Years, Price>>
即
197 => {
1 year => 6
2 years => 12
}
答案 2 :(得分:0)
如果您不想使用像番石榴这样的外部库,您可以创建自己的库。
HashMap<Integer, ArrayList<String>> hm = new HashMap();
for(int i = 0; i < 10; ++i){
ArrayList<String> li = new ArrayList();
for(int j = 0; j < 10; ++j)
li.add(j * i);
hm.put(i, li);
}
System.out.println(hm.get(4));//[0,4,8,12....]