繁体   English   中英

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

[英]Any data structure in java that supports multiple keys - not map exactly

我遇到了一个需要这样的情况:

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

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

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

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

是的,您可以使用像番石榴这样的现有库来实现。 这是guava库链接的 MultiMap接口的链接 这里有一个关于如何使用它的例子(取自这里 ):

  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>>并手动处理对需要与单个键关联的对象列表的引用。

有MultiMap,但这看起来不是一个好的用例,你应该使用Map<Product, Map<Years, Price>>

197 => {
    1 year => 6
    2 years => 12
}

如果您不想使用像番石榴这样的外部库,您可以创建自己的库。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM