HashMap 的简单介绍

HashMap的几个知识点
1. HashMap 是以key–value对的形式存储的,key值是唯一的,一个key只能对应着一个value,但是value是可以重复的
2. HashMap 如果再次添加相同的key值,它会覆盖key值所对应的内容,这也是与HashSet不同的一点,Set通过add添加相同的对象,不会再添加到Set中去
3. HashMap 提供了get方法,通过key值取对应的value值,但是HashSet只能通过迭代器Iterator来遍历数据,找对象

        HashMap  hashMap =new HashMap();
        // HashMap 是以key--value对的形式存储的,key值是唯一的,一个key只能对应着一个value,但是value是可以重复的
        hashMap.put(1,"aaa");
        hashMap.put(2,"bbb");
        hashMap.put(3,"ccc");

        //HashMap 如果再次添加相同的key值,它会覆盖key值所对应的内容,
//      这也是与HashSet不同的一点,Set通过add添加相同的对象,不会再添加到Set中去
        hashMap.put(1,"ddd");

        // get方法,通过key值取对应的value值
        System.out.println(hashMap.get(1)); // 输出为  ddd

HashMap 提供了两种方法来遍历集合中的所有对象,
第一种: keySet() 方法,通过取得所有的Key值来获取对象

//HashMap取所有元素的第一种你方法

        // keySet() 方法,返回类型为Set, 是所有key值的集合,Set 遍历所有元素是通过 Iterator 实现的
        Set set=hashMap.keySet();
        for(Iterator iter=set.iterator();iter.hasNext();){
            int i=(int)iter.next();
            System.out.println(i);
            System.out.println(hashMap.get(i));
        }

第二种: entrySet()方法,通过获取所有的Map.Entry对象来获得key-value对, 这两种方式在底层的实现其实是一致的,第一种先取得key 然后 再取得value, 第二种是把key和value的值一次全拿到,但其实都是对Entry的操作,Entry是Map的一个内部类,数据的存放都是以Entry为单位进行存放的

        // HashMap遍历元素的第二种方式:  entrySet(), 比较简单,, 
        // 这两种方式在底层的实现其实是一致的,第一种先取得key 然后 再取得value, 
        // 第二种是把key和value的值一次全拿到,但其实都是对Entry的操作
        Set set2 = hashMap.entrySet();
        // 在这种方式中,Set中维护的是一个Entry, 它是Map的一个内部类,提供了getkey
        // 和getValue 方法
        for(Iterator iter=set.iterator();iter.hasNext();){
            Map.Entry entry = (Map.Entry) iter.next();
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
        }

keySet() 和values() 的区别:
keySet() 是获得key的集合, values是获得所有values的集合,而且他们的返回类型也不一致, Values()方法,返回类型为 Collection,但是 keySet()方法,返回类型为 Set
这是由于它们所具备的不同特性决定的:
每一个key值都是唯一的,Set中不存在重复元素,
而value值却有可能有重复元素,所以只能返回一个Collection

一个利用HashMap 实现小功能的例子,(统计一个数组中每个元素出现的个数)
思路: 将值作为key ,将出现的次数作为value

// 利用HashMap 实现统计数组,集合中每个元素出现的次数, 将值作为key ,将出现的次数作为value
        String[]  array= new String[6];
        array[0]="aa";
        array[1]="aa";
        array[2]="bb";
        array[3]="cc";
        array[4]="cc";
        array[5]="cc";
        HashMap map = new HashMap();
        for (int i=0; i<array.length;i++){
            if(map.get(array[i]) == null){
                map.put(array[i],1);
            }else {
                map.put(array[i], (int)map.get(array[i])+1);
            }
        }
        Set arraySet = map.keySet();
        for(Iterator iter=arraySet.iterator();iter.hasNext();){
            System.out.print("输出值:   ");
            String s1=(String)iter.next();
            System.out.print(s1+"   其次数为:   ");
            System.out.println(map.get(s1));
        }

小知识讲解:内部类

        // 内部类, 调用的时候  A.B(), 以后专门补充内部类的一些情况
        /*
         * 形式如 
         * class A{
         *      class B{
         *      }
         * }
         */
        // 访问权限的问题, public  private  默认,protected
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值