此多图允许重复的键值对。JDK类似物是HashMap <K,List>,HashMap <K,Set>等。
钥匙的顺序 | 价值的顺序 | 重复 | 模拟键 | 模拟值 | 番石榴 | 阿帕奇 | Eclipse(GS)集合 | JDK |
---|---|---|---|---|---|---|---|---|
没有定义的 | 插入顺序 | 是 | 哈希图 | 数组列表 | ArrayListMultimap | MultiValueMap | FastListMultimap | HashMap<K, ArrayList<V>> |
没有定义的 | 没有定义的 | 没有 | 哈希图 | 哈希集 | HashMultimap | MultiValueMap. multiValueMap( new HashMap<K, Set>(), HashSet.class); | UnifiedSetMultimap | HashMap<K, HashSet<V>> |
没有定义的 | 已排序 | 没有 | 哈希图 | 树集 | Multimaps. newMultimap( HashMap, Supplier <TreeSet>) | MultiValueMap.multiValueMap( new HashMap<K, Set>(), TreeSet.class) | TreeSortedSet- Multimap | HashMap<K, TreeSet<V>> |
插入顺序 | 插入顺序 | 是 | LinkedHashMap | 数组列表 | LinkedListMultimap | MultiValueMap。multiValueMap(new LinkedHashMap <K,List>(),ArrayList.class); | LinkedHashMap <K,ArrayList> | |
插入顺序 | 插入顺序 | 没有 | LinkedHashMap | 链接哈希集 | LinkedHashMultimap | MultiValueMap. multiValueMap(new LinkedHashMap<K, Set>(), LinkedHashSet.class) | LinkedHashMap<K, LinkedHashSet<V>> | |
已排序 | 已排序 | 没有 | 树状图 | 树集 | TreeMultimap | MultiValueMap. 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
来自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集合:
MultiValueMap
MultiValueMapLinked
MultiValueMapTree
二。GS / Eclipse系列
FastListMultimap
HashBagMultimap
TreeSortedSetMultimap
UnifiedSetMultimap
三,番石榴
HashMultiMap
LinkedHashMultimap
LinkedListMultimap
TreeMultimap
ArrayListMultimap