java中支持多个键的任何数据结构 - 不完全映射

时间:2015-08-31 07:53:15

标签: java data-structures hashmap

我遇到的情况是:我需要类似的东西:

197 => 6   (1 year)
197 => 12  (2 years)

想要根据订阅年份添加多个产品及其价格,价值会有所不同。

我想知道java中是否有任何支持重复键的数据结构(应该像map一样,但必须支持重复键)。

我可以通过创建一个类来做,但只是想知道是否有任何东西支持这个东西..它更像是一个MAP,但没有地图,因为它需要支持多个键。

3 个答案:

答案 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....]