由于项目须要,又开始写Java代码。C++有一套固定的STL,而java的容器则灵活的多,最基本的应该是java.util.*下面的而一些容器,固然在其余的包里也有其余继承了该包为了各自需求实现的一些容器。java
HashMutliMapgoogle
STL中有MultiMap,而java的util包中并无这个容器。想本身写也没有这个时间,因而去网上搜了下。发现了在google的guava libary的包下有这个容器。spa
google类库的下载地址:http://code.google.com/p/guava-libraries/wiki/Release09。code
import的路径是:com.google.common.collect.Multimap;orm
在这个包中google实现了一系列的接口和容器,Multimap是一个定义的接口,继承接口生成了许多的各类容器,很是方便。继承
继承Multimap有许多的Multimap变种。分别有:接口
1.ArrayListMultimap:get
2.ForwardingMultimap:it
3.HashMultimap:table
4.ImmutableListMultimap:
5.ImmutableMultimap:
6.ImmutableSetMultimap:
7.LinkedHashMultimap:
8.LinkedListMultimap:
9.TreeMultimap:
这边使用HashMultimap作例子了解下使用过程
--定义:
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);
--遍历:能够使用遍历器进行遍历,也能够获取其Key值进行遍历
使用遍历器遍历:
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
使用Key值遍历,key值能够获得一个所有键值的MultiSet或者是一个没有重复键值的KeySet,这边使用没有重复键值的作例子
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