1. 程式人生 > >【Java 學習筆記】 HashMultimap(guava)

【Java 學習筆記】 HashMultimap(guava)

因為專案需要,又開始寫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做例子瞭解下使用過程

--定義:

複製程式碼
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
複製程式碼