JavaGuava,Apache和Eclipse集合中的Multimap

示例

此多图允许重复的键值对。JDK类似物是HashMap <K,List>,HashMap <K,Set>等。

钥匙的顺序价值的顺序重复模拟键模拟值番石榴阿帕奇Eclipse(GS)集合JDK
没有定义的插入顺序哈希图数组列表ArrayListMultimapMultiValueMapFastListMultimapHashMap<K, ArrayList<V>>
没有定义的没有定义的没有哈希图哈希集HashMultimapMultiValueMap. multiValueMap( new HashMap<K, Set>(), HashSet.class);UnifiedSetMultimapHashMap<K, HashSet<V>>
没有定义的已排序没有哈希图树集Multimaps. newMultimap( HashMap, Supplier <TreeSet>)MultiValueMap.multiValueMap( new HashMap<K, Set>(), TreeSet.class)TreeSortedSet- MultimapHashMap<K, TreeSet<V>>
插入顺序插入顺序LinkedHashMap数组列表LinkedListMultimapMultiValueMap。multiValueMap(new LinkedHashMap <K,List>(),ArrayList.class);
LinkedHashMap <K,ArrayList>
插入顺序插入顺序没有LinkedHashMap链接哈希集LinkedHashMultimapMultiValueMap. multiValueMap(new LinkedHashMap<K, Set>(), LinkedHashSet.class)
LinkedHashMap<K, LinkedHashSet<V>>
已排序已排序没有树状图树集TreeMultimapMultiValueMap. multiValueMap( new TreeMap<K, Set>(),TreeSet.class)
TreeMap<K, TreeSet<V>>

使用多图的示例

任务:解析“ Hello World!大家好!Hi World!” 字符串以分隔单词并使用MultiMap打印每个单词的所有索引(例如,Hello = [0,2],World!= [1,5],依此类推)

1.来自Apache的MultiValueMap

    String INPUT_TEXT = "Hello World! Hello All! Hi World!";
    // 将文本解析为单词和索引
    List<String> words = Arrays.asList(INPUT_TEXT.split(" "));
    // 创建多图
    MultiMap<String, Integer> multiMap = new MultiValueMap<String, Integer>();


    // 填充多图
    int i = 0;
    for(String word: words) {
        multiMap.put(word, i);
        i++;
    }

    // 打印所有单词
    System.out.println(multiMap); // 打印{Hi = [4],Hello = [0,2],世界!= [1,5],全部!= [3]}-按随机顺序
    // 打印所有唯一的单词
    System.out.println(multiMap.keySet());    // 打印[嗨,您好,世界!,全部!]-随机订购

    // 打印所有索引
    System.out.println("Hello = " + multiMap.get("Hello"));    // 打印[0,2]
    System.out.println("World = " + multiMap.get("World!"));    // 打印[1,5]
    System.out.println("All = " + multiMap.get("All!"));    // 打印[3]
    System.out.println("Hi = " + multiMap.get("Hi"));    // 打印[4]
    System.out.println("Empty = " + multiMap.get("Empty"));    // 打印空

    // 打印计数唯一词
    System.out.println(multiMap.keySet().size());    //打印4

2.来自GS / Eclipse Collection的HashBiMap

    String[] englishWords = {"one", "two", "three","ball","snow"};
    String[] russianWords = {"jeden", "dwa", "trzy", "kula", "snieg"};

    // 创建多集
    MutableBiMap<String, String> biMap = new HashBiMap(englishWords.length);
    // 创建英语-波兰语字典
    int i = 0;
    for(String englishWord: englishWords) {
        biMap.put(englishWord, russianWords[i]);
        i++;
    }

    // 打印字数
    System.out.println(biMap); // 打印{two = dwa,ball = kula,one = jeden,snow = snieg,three = trzy}-按随机顺序
    // 打印所有唯一的单词
    System.out.println(biMap.keySet());    // 打印[雪,二,一,三,球]-随机排列
    System.out.println(biMap.values());    // 打印[dwa,kula,jeden,snieg,trzy]-随机排列

    // 打印文字翻译
    System.out.println("one = " + biMap.get("one"));    // 打印一个= jeden
    System.out.println("two = " + biMap.get("two"));    // 打印两个= dwa
    System.out.println("kula = " + biMap.inverse().get("kula"));    // 打印库拉=球
    System.out.println("snieg = " + biMap.inverse().get("snieg"));    // 打印snieg =雪
    System.out.println("empty = " + biMap.get("empty"));    // 打印空=空

    // 打印数词对
    System.out.println(biMap.size());    //打印5

  1. 来自Guava的HashMultiMap

     String INPUT_TEXT = "Hello World! Hello All! Hi World!";
    // 将文本解析为单词和索引
    List<String> words = Arrays.asList(INPUT_TEXT.split(" "));
    // 创建多图
    Multimap<String, Integer> multiMap = HashMultimap.create();
    // 填充多图
    int i = 0;
    for(String word: words) {
        multiMap.put(word, i);
        i++;
    }
    // 打印所有单词
    System.out.println(multiMap); // 打印{Hi = [4],Hello = [0、2],World!= [1、5],All!= [3]}-键和值以随机顺序排列
    // 打印所有唯一的单词
    System.out.println(multiMap.keySet());    // 打印[嗨,您好,世界!,全部!]-随机订购
    // 打印所有索引
    System.out.println("Hello = " + multiMap.get("Hello"));    // 打印[0,2]
    System.out.println("World = " + multiMap.get("World!"));    // 打印[1,5]
    System.out.println("All = " + multiMap.get("All!"));    // 打印[3]
    System.out.println("Hi = " + multiMap.get("Hi"));    // 打印[4]
    System.out.println("Empty = " + multiMap.get("Empty"));    // 打印[]
    // 打印所有单词
    System.out.println(multiMap.size());    //打印6
    // 打印计数唯一词
    System.out.println(multiMap.keySet().size());    //打印4

否示例:

I. Apache集合:

  1. MultiValueMap

  2. MultiValueMapLinked

  3. MultiValueMapTree

二。GS / Eclipse系列

  1. FastListMultimap

  2. HashBagMultimap

  3. TreeSortedSetMultimap

  4. UnifiedSetMultimap

三,番石榴

  1. HashMultiMap

  2. LinkedHashMultimap

  3. LinkedListMultimap

  4. TreeMultimap

  5. ArrayListMultimap