【Java 学习笔记】 HashMultimap(guava)

时间:2021-11-16 16:35:59

文章转自:http://www.cnblogs.com/xiaoka/archive/2011/08/15/2139805.html

因为项目需要,又开始写Java代码。C++有一套固定的STL,而java的容器则灵活的多,最基本的应该是java.util.*下面的而一些容器,当然在其他的包里也有其他继承了该包为了各自需求实现的一些容器。

HashMutliMap

STL中有MultiMap,而java的util包中并没有这个容器。想自己写也没有这个时间,于是去网上搜了下。发现了在google的guava libary的包下有这个容器。

google类库的下载地址:http://code.google.com/p/guava-libraries/wiki/Release09。

import的路径是:com.google.common.collect.Multimap;

在这个包中google实现了一系列的接口和容器,Multimap是一个定义的接口,继承接口生成了许多的各种容器,非常方便。

继承Multimap有许多的Multimap变种。分别有:

1.ArrayListMultimap:

2.ForwardingMultimap:

3.HashMultimap:

4.ImmutableListMultimap:

5.ImmutableMultimap:

6.ImmutableSetMultimap:

7.LinkedHashMultimap:

8.LinkedListMultimap:

9.TreeMultimap:

这边使用HashMultimap做例子了解下使用过程

--定义:

【Java 学习笔记】 HashMultimap(guava)
HashMultimap<Integer,Integer> doc_numberic = HashMultimap.create();
map.put(2, 4);
map.put(1, 2);
map.put(1, 3);
map.put(2, 6);
map.put(2, 4);
map.put(11, 2);
map.put(12, 3);
map.put(21, 6);
map.put(6, 7);
【Java 学习笔记】 HashMultimap(guava)

--遍历:可以使用遍历器进行遍历,也可以获取其Key值进行遍历

    使用遍历器遍历:

【Java 学习笔记】 HashMultimap(guava)
Iterator iter = map.entries().iterator();
while(iter.hasNext())
{
Map.Entry
<Integer, Integer> entry = (Map.Entry<Integer, Integer>)iter.next();
System.out.println(String.format(
"%d:%d", entry.getKey(),entry.getValue()));
}

结果:
1:2
1:3
2:4
2:6
21:6
6:7
11:2
12:3
【Java 学习笔记】 HashMultimap(guava)

    使用Key值遍历,key值可以得到一个全部键值的MultiSet或者是一个没有重复键值的KeySet,这边使用没有重复键值的做例子

【Java 学习笔记】 HashMultimap(guava)
Set<Integer> keys = map.keySet();
for(int key:keys)
{
String result = String.format("%d:", key);
Set<Integer> values = map.get(key);
for(int value:values)
{
result= result+" "+value;
}
System.out.println(result);
}


结果:
1: 2 3
2: 4 6
21: 6
6: 7
11: 2
12: 3
【Java 学习笔记】 HashMultimap(guava)