由於項目須要,又開始寫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