Muiltset和MultiMap学习--如何让map存放相同的key
来源:互联网 发布:mac终端返回上级目录 编辑:程序博客网 时间:2024/06/15 22:02
在sun的api中,map是不支持直接存放相同的key的,相同key会被后一个key替代的,但是我们可以通过一些工具包实现这样的功能,
google基于java1.6的类库集合的扩展项目–guava,其中com.google.common.collect包就支持这样的操作.下面就直接看代码:
public class NewSetTest { /** * ArrayuListMultiMap的使用, * 相当于map的 <key,List> 形式,返回List视图 */ @Test public void test1(){ ArrayListMultimap<Integer,Object> amap = ArrayListMultimap.create(); amap.put(1, "hello"); amap.put(1, "guava"); amap.put(2, "stydy");// System.out.println(amap);//{1=[hello, guava], 2=[stydy]} //get(key) 得到 collection 对象 List<Object> list = amap.get(1); System.out.println(list);//[hello, guava] } /** * HashMultimap 实现往map中添加重复的key,这个是与set是不同的 */ @Test public void test2(){ HashMultimap<Integer,Object> hmap = HashMultimap.create(); hmap.put(1, "hello"); hmap.put(1, "guava"); //可以添加重复的key,不会被替换 hmap.put(2, "stydy"); //由get(key) 得到Set视图 Set<Object> set = hmap.get(1); //entries方式遍历,遍历了3次 for(Entry<Integer, Object> entry:hmap.entries()){ Integer key = entry.getKey(); Object value = entry.getValue();// System.out.print(key+":"+value+" ");//1:hello 1:guava 2:stydy } //转成asMap后进行遍历,遍历了两次 Map<Integer, Collection<Object>> asMap = hmap.asMap(); for (Entry<Integer,Collection<Object>> entry : asMap.entrySet()) { Integer key = entry.getKey(); Object value = entry.getValue(); System.out.print(key+":"+value+" ");//1:[hello, guava] 2:[stydy] } } /** * Multiset 实现往set中添加重复的元素 */ @Test public void test3(){ Set<Integer>set = new HashSet<>(); set.add(3); set.add(2); set.add(2); set.add(4);// System.out.println(set);//[2, 3, 4] Multiset<Integer>mset = HashMultiset.create(); mset.add(3); mset.add(2); mset.add(2); mset.add(4);// System.out.println(mset);//[2 x 2, 3, 4] //**----Multiset看做map时候的功能-----*// //elementSet 返回不重复的元素 Set<Integer> elementSet = mset.elementSet();// System.out.println(elementSet);//[2, 3, 4] //entrySet 返回重复的元素 Set<com.google.common.collect.Multiset.Entry<Integer>> entrySet = mset.entrySet(); System.out.println(entrySet);//[2 x 2, 3, 4] } /** * Multiset实现统计某个元素的个数 */ @Test public void test4(){ List<Integer>list = new ArrayList<>(); list.add(3); list.add(2); list.add(2); list.add(4); //Multiset的addAll方法以及统计指定元素的个数的方法 Multiset<Integer>mset = HashMultiset.create(); mset.addAll(list);// System.out.println(mset);//[2 x 2, 3, 4] //统计某个元素的个数 int count = mset.count(2);// System.out.println("2的个数为 = "+count);//2的个数为 = 2 //直接设置某个元素的个数 mset.setCount(2, 1); System.out.println("mset = "+mset);//mset = [2, 3, 4] } /** * BiMap的使用: * BiMap可以使得map的value为唯一,并且可以通过value得到key */ @Test public void test5(){ BiMap<String,Integer>bmap = HashBiMap.create(); bmap.put("zhangsan", 3); bmap.put("li", 4); bmap.put("wang", 2);// System.out.println(bmap);//{wang=2, zhangsan=3, li=4} //通过value的到key String key = bmap.inverse().get(4);// System.out.println(key);//li }}`
阅读全文
0 0
- Muiltset和MultiMap学习--如何让map存放相同的key
- 如何更新map、multimap中得key
- map 和multimap 的区别
- 遍历 map 获取相同 key 值的和
- 如何获得map的key和Value
- 合并map中key相同的value
- java中map插入相同的key
- Map 取相同值的key
- std::map和multimap
- Map和MultiMap使用
- map和multimap
- STL---map 和 multimap
- c++map和multimap
- map和multimap 详解
- Map 和 multimap
- map和multimap
- map和multimap
- Map和multimap容器
- gcc: error trying to exec 'as': execvp: No such file or directory
- 已有 JFFs2文件系统的修改
- C# 自定义cookie封装类,简化Cookie操作
- 【新mac工作机】docker化部署jenkins环境(一)
- HDU6136Death Podracing
- Muiltset和MultiMap学习--如何让map存放相同的key
- React ES5与ES6语法写法比较
- [日推荐] 『无忧育儿说』养育孩子就是这么简单!
- lua lib 的编译
- 对double类型中存在-0.0的数据检验
- 安卓软键盘的处理
- 总结
- C++ template高阶技巧(4)---《C++ Templates》
- 【swift】关于po命令不显示问题 error: <EXPR>:3:1: error: use of unresolved identifier