亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

guava中Multimap、HashMultimap用法小結

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

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

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

它可以很簡單的實現(xiàn)上面我們所說的功能,先看下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和當前的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接口的實現(xiàn)類HashMultimap使用方法詳解

  • 創(chuàng)建HashMultimap對象
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]}

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

  • 常用的方法示例
 //判斷集合中是否存在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的集合,重復的key將會用key * num的方式來表示
        Multiset<Integer> set = map.keys();
        System.out.println(set);
        //返回集合中所有不重復的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方法會替換掉key的value值,并且返回之前對應的值。

2. ImmutableMultimap不可變集合

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

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

3.LinkedHashMultimap實現(xiàn)類

LinkedHashMultimap實現(xiàn)類與HashMultimap類的實現(xiàn)方法一樣,唯一的區(qū)別是LinkedHashMultimap保存了記錄的插入順序,在使用Iterator循環(huán)遍歷的時候先得到的肯定是先放入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);

運行結果是:

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

4.TreeMultimap實現(xiàn)類

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

 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);

返回的結果是:

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

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

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

相關文章

  • Java中File類方法詳解以及實踐

    Java中File類方法詳解以及實踐

    Java File類的功能非常強大,利用java基本上可以對文件進行所有操作,下面這篇文章主要給大家介紹了關于Java中File類方法以及實踐的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • mybatis那些約定的配置你真的都了解嗎(經(jīng)驗總結)

    mybatis那些約定的配置你真的都了解嗎(經(jīng)驗總結)

    mybatsi中Mapper和xml文件之間有很多約定俗稱的規(guī)則,比如名稱匹配,包掃描,別名等,這些規(guī)則是什么。如果想更加靈活,該如何配置呢?今天就給大家講一下如何配置mybatsi的xml文件
    2021-06-06
  • SpringBoot實現(xiàn)阿里云快遞物流查詢的示例代碼

    SpringBoot實現(xiàn)阿里云快遞物流查詢的示例代碼

    本文將基于springboot實現(xiàn)快遞物流查詢,物流信息的獲取通過阿里云第三方實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2021-10-10
  • Java日常練習題,每天進步一點點(48)

    Java日常練習題,每天進步一點點(48)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • Java設計模式之工廠方法模式實例簡析

    Java設計模式之工廠方法模式實例簡析

    這篇文章主要介紹了Java設計模式之工廠方法模式,較為詳細的分析了Java工廠模式的功能、定義并給出了實例代碼加以總結分析,需要的朋友可以參考下
    2015-11-11
  • 使用spring動態(tài)獲取接口的不同實現(xiàn)類

    使用spring動態(tài)獲取接口的不同實現(xiàn)類

    這篇文章主要介紹了使用spring動態(tài)獲取接口的不同實現(xiàn)類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 如何基于spring security實現(xiàn)在線用戶統(tǒng)計

    如何基于spring security實現(xiàn)在線用戶統(tǒng)計

    這篇文章主要介紹了如何基于spring security實現(xiàn)在線用戶統(tǒng)計,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Java Hibernate對象(瞬時態(tài),持久態(tài),脫管態(tài))詳解

    Java Hibernate對象(瞬時態(tài),持久態(tài),脫管態(tài))詳解

    這篇文章主要介紹了Java Hibernate對象(瞬時態(tài),持久態(tài),脫管態(tài))詳解的相關資料,這里對Java Hibernate對象進行了介紹及總結,需要的朋友可以參考下
    2016-11-11
  • 獲取Spring當前配置的兩種方式

    獲取Spring當前配置的兩種方式

    這篇文章主要給大家介紹了獲取Spring當前配置的,兩種方式文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Java實現(xiàn)HTTP請求的4種方式總結

    Java實現(xiàn)HTTP請求的4種方式總結

    這篇文章主要給大家介紹了關于Java實現(xiàn)HTTP請求的4種方式,在java開發(fā)中,經(jīng)常遇到需要調用第三方提供的接口服務的需求,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2023-08-08

最新評論