欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

guava中Multimap、HashMultimap用法小結(jié)

 更新時(shí)間:2022年05月26日 09:30:39   作者:艾米莉Emily  
這篇文章主要介紹了guava中Multimap、HashMultimap使用,Multimap它可以很簡(jiǎn)單的實(shí)現(xiàn)一些功能,LinkedHashMultimap實(shí)現(xiàn)類與HashMultimap類的實(shí)現(xiàn)方法一樣,唯一的區(qū)別是LinkedHashMultimap保存了記錄的插入順序,本文就這些內(nèi)容講解的非常詳細(xì),需要的朋友參考下吧

在介紹Multimap之前我們先說(shuō)一下Map,Map是一個(gè)key、value類型的鍵值對(duì)集合,集合中key不可以重復(fù),但value可以重復(fù),如果我們想在Map集合中存入一個(gè)相同的key,不同的value值得時(shí)候就必須使用 Map<Integer,,list<Object>>Map<Integer,List<Object>>模式來(lái)存數(shù)據(jù),這樣做很麻煩,而且編程效率又很低;

1. 現(xiàn)在我們來(lái)介紹一種更高效的集合Multimap

它可以很簡(jiǎn)單的實(shí)現(xiàn)上面我們所說(shuō)的功能,先看下Multimap接口的源碼

@GwtCompatible
public interface Multimap<K, V> {
  //返回Multimap集合的key、value pair的數(shù)量  
  int size();
  //判斷Multimap是否包含key、value pair
  boolean isEmpty();
  //判斷Multimap中是否包含指定key的value值
  boolean containsKey(@Nullable Object key);
  //判斷Multimap中是否包含指定value的key
  boolean containsValue(@Nullable Object value);
  //判斷Multimap中是否包含指定的key-value pair的數(shù)據(jù)
  boolean containsEntry(@Nullable Object key, @Nullable Object value);
  //將數(shù)據(jù)加入到Multimap中
  boolean put(@Nullable K key, @Nullable V value);
  //刪除Multimap中指定key-value pair
  boolean remove(@Nullable Object key, @Nullable Object value);
  //將指定的key-集合數(shù)據(jù)加入Multimap中
  boolean putAll(@Nullable K key, Iterable<? extends V> values);
  //將指定的Multimap和當(dāng)前的Multimap合并
  boolean putAll(Multimap<? extends K, ? extends V> multimap);
  //替換指定key的value
  Collection<V> replaceValues(@Nullable K key, Iterable<? extends V> values);
  //刪除Imultimap中的指定key數(shù)據(jù)
  Collection<V> removeAll(@Nullable Object key);
  //清空Imultimap中的數(shù)據(jù)
  void clear();
  //獲取指定key的值
  Collection<V> get(@Nullable K key);
  //獲取所有的key集合
  Set<K> keySet();

  Multiset<K> keys();

  Collection<V> values();

  Collection<Map.Entry<K, V>> entries();

  Map<K, Collection<V>> asMap();

  @Override
  boolean equals(@Nullable Object obj);

  @Override
  int hashCode();
}

Multimap接口的實(shí)現(xiàn)類HashMultimap使用方法詳解

  • 創(chuàng)建HashMultimap對(duì)象
Multimap<Integer, Integer> map = HashMultimap.<Integer, Integer>create();
        map.put(1, 2);
        map.put(1, 2);
        map.put(1, 3);
        map.put(1, 4);
        map.put(2, 3);
        map.put(3, 3);
        map.put(4, 3);
        map.put(5, 3);
        System.out.println(map);
{1=[4, 2, 3], 2=[3], 3=[3], 4=[3], 5=[3]}

從上面的結(jié)果集可以看出,key不可以重復(fù),相同key的key-value pair 的value值是放在同一個(gè)數(shù)組中,相同的value會(huì)去重。

  • 常用的方法示例
 //判斷集合中是否存在key-value為指定值得元素
        System.out.println(map.containsEntry(1, 2));
        System.out.println(map.containsEntry(1, 6));
        //獲取key為1的value集合
        Collection<Integer> list = map.get(1);
        System.out.println(list);
        //返回集合中所有key的集合,重復(fù)的key將會(huì)用key * num的方式來(lái)表示
        Multiset<Integer> set = map.keys();
        System.out.println(set);
        //返回集合中所有不重復(fù)的key的集合
        Set<Integer> kset = map.keySet();
        System.out.println(kset);
true
false
[4, 2, 3]
[1 x 3, 2 x 2, 3, 4, 5]
[1, 2, 3, 4, 5]

replaceValues替換Multimap中指定key的值

Collection<Integer> coll = map.replaceValues(1, Arrays.asList(1,7,8,9,10));
        System.out.println(coll);
        System.out.println(map);
[4, 2, 3]
{1=[8, 9, 1, 10, 7], 2=[4, 3], 3=[3], 4=[3], 5=[3]}

replaceValues方法會(huì)替換掉key的value值,并且返回之前對(duì)應(yīng)的值。

2. ImmutableMultimap不可變集合

ImmutableMultimap中提供了三個(gè)主要的靜態(tài)方法of、builder、copyof;

 //創(chuàng)建一個(gè)靜態(tài)不可變的Multimap對(duì)象
        Multimap<Integer, Integer> map = ImmutableMultimap.<Integer, Integer>of();
        Multimap<Integer, Integer> map1 = ImmutableMultimap.<Integer, Integer>builder().build();
        //從另外一個(gè)集合中復(fù)制數(shù)據(jù)元素到Multimap對(duì)象中
        Multimap<Integer, Integer> map2 = ImmutableMultimap.copyOf(map);

3.LinkedHashMultimap實(shí)現(xiàn)類

LinkedHashMultimap實(shí)現(xiàn)類與HashMultimap類的實(shí)現(xiàn)方法一樣,唯一的區(qū)別是LinkedHashMultimap保存了記錄的插入順序,在使用Iterator循環(huán)遍歷的時(shí)候先得到的肯定是先放入Multimap中的數(shù)據(jù)。

 Multimap<Integer, Integer> map = LinkedHashMultimap.<Integer, Integer>create();
        map.putAll(4, Arrays.asList(5,3,4,2,1,56));
        map.putAll(3, Arrays.asList(3,4,2,6,8,7));
        map.put(1, 2);
        System.out.println(map);

運(yùn)行結(jié)果是:

{4=[5, 3, 4, 2, 1, 56], 3=[3, 4, 2, 6, 8, 7], 1=[2]}

4.TreeMultimap實(shí)現(xiàn)類

TreeMultimap類繼承成了Multimap接口,它的所有方法跟HashMultimap一樣,但是有一點(diǎn)不同的是該類實(shí)現(xiàn)了SortedSetMultimap接口,該接口會(huì)將存入的數(shù)據(jù)按照自然排序,默認(rèn)是升序。

 Multimap<Integer, Integer> map = TreeMultimap.<Integer, Integer>create();
        map.putAll(4, Arrays.asList(5,3,4,2,1,56));
        map.putAll(3, Arrays.asList(3,4,2,6,8,7));
        map.put(1, 2);
        System.out.println(map);

返回的結(jié)果是:

{1=[2], 3=[2, 3, 4, 6, 7, 8], 4=[1, 2, 3, 4, 5, 56]}

Multimap接口的實(shí)現(xiàn)類不僅僅只有HashMultimap、TreeMultimap、LinkedHashMultimap、ImmutableMultimap這幾種,還有其它的實(shí)現(xiàn)類,我會(huì)在以后的學(xué)習(xí)過(guò)程中詳解。

到此這篇關(guān)于guava中Multimap、HashMultimap使用詳解的文章就介紹到這了,更多相關(guān)guava中Multimap、HashMultimap使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論