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    }}`
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 氮氧传感器坏了怎么办 考试车离合太松怎么办 胎心监护不过关怎么办 羚羊角的功效与作用发烧怎么办 小孩上课注意力不集中怎么办 2岁宝宝不会说话怎么办 小孩脖子上长淋巴结怎么办 小孩子上课注意力不集中该怎么办 脸过敏干燥起皮怎么办 脸上皮肤干燥起皮怎么办 身上皮肤干燥起皮怎么办 皮肤暗黄有色斑怎么办 我皮肤干燥暗黄怎么办 脸上有皮肤暗黄怎么办 皮肤暗黄毛孔大怎么办 脸上很干燥起皮怎么办 脸上的皮肤起皮怎么办 身体的皮肤好干怎么办 滴油雾化器炸油怎么办 已经发炎的痘痘怎么办 被养生馆骗了怎么办 做完微针结痂了怎么办 秋季脸干燥起皮怎么办 身上的皮肤太干怎么办 板材眼镜腿松了怎么办 超声刀后喝酒了怎么办 开眼角疤痕增生了怎么办 开了眼角有增生怎么办 全切双眼皮留疤怎么办 开内眼角留疤了怎么办 开眼角长了颗粒怎么办 开刀后疤痕庝痛怎么办 眼角开得太尖了怎么办 眼角开得太大了怎么办 开眼角后增生了怎么办 下颌骨宽怎么办不整容 脸两边骨头太宽怎么办 接了睫毛眼睛疼怎么办 下颌骨错位脸歪怎么办 假体隆鼻感冒了怎么办 打了玻尿酸怀孕怎么办