hashMap的使用和分析

1、背景

面试当中我们肯定会被问到集合,那集合当中hashMap被问到的概率是非常高的。这也是我们开发当中经常用到的集合类型,下面我就简单的对这个集合做了总结。主要是对这个集合的使用进行操作。然后对他具体是实现进行了简单的总结

2、hashMap的使用

就直接上代码吧,如下:

    /**
     * 1、输出是无序的
     * 2、可以为key值NULL,value也可以为NUll
     * 3、可以存对象但是遍历的时候需要判断类型,否则会异常
     */
    public void hashMaptest(){
        HashMap hashMap=new HashMap();

        UserInf userInf=new UserInf();
        userInf.setUserId(1);
        userInf.setUserName("王一");

        hashMap.put("数据key1","数据value1");
        hashMap.put("数据key2","数据value2");
        hashMap.put("数据key3","数据value3");
        hashMap.put("数据key4","数据value4");
        hashMap.put(null,null);
        hashMap.put("数据key5","数据value5");
        hashMap.put(userInf,1);
        System.out.println("单独取userInf:"+hashMap.get(userInf));

        //防止下面异常,决定删除对象为key的内容
       hashMap.remove(userInf);

       Iterator iter=hashMap.entrySet().iterator();
        while (iter.hasNext()){
            Map.Entry entry = (Map.Entry) iter.next();
            String key=(String)entry.getKey();
            String value=(String) entry.getValue();
            System.out.println("key:"+key+"===value:"+value+"\n");
        }

        System.out.println("单独取key1:"+hashMap.get("数据key1"));

    }

上面是我测试写的代码,我们可以看到结果:

主要是证明下面几点在注释中有说到,无序,可以存对象可以存null

这里我需要说明一下key值存对象的时候,要重写下equal和hashcode方法。你们要问为什么?

其实去百度一下有很多更加完美的解释,我这就简单粗暴的说一下呗

因为hashMap的key值是不可以重复的,你存入对象的时候,他会判断你的map集合里面是否已经有已经存在的数据;

这样就是通过equal和hashcode计算你的重复,如果你不重新写,那就是默认Object的方法,结果可想而知。有可能你的 对象比如说你new了两个,但是你的对象里面的值是一模一样的。所以在我们普通人的世界里面是认为这两个对象是一样的,但是在java对象里面你new了两个对象那么他们就是不一样的哦。而且你下次使用key对象去查询也不太好查询出来。

大概就是这么个意思吧个人理解。

3、hashMap底层原理

底层怎么实现的我这没这水平写不出来代码,所以我就自己更具大家说的我选出了比较容易理解的。下面是别人家博客说的大概意思

HashMap底层就是一个数组结构,数组中的每一项又是一个链表。数组+链表结构,新建一个HashMap的时候,就会初始化一个数组。Entry就是数组中的元素,每个Entry其实就是一个key-value的键值对,它持有一个指向下一个元素的引用,这就构成了链表,HashMap底层将key-value当成一个整体来处理,这个整体就是一个Entry对象。HashMap底层采用一个Entry【】数组来保存所有的key-value键值对,当需要存储一个Entry对象时,会根据hash算法来决定在其数组中的位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry对象时,也会根据hash算法找到其在数组中的存储位置, 在根据equals方法从该位置上的链表中取出Entry;

4、总结

集合当中我们面试还是使用当中最容易遇到的就是hashMap集合,因为他可以作为一个仿对象使用,而且效率还比较高

下面记录几点;

1、初始大小是16

2、扩容2的次幂

3、负载因子0.75

猜你喜欢

转载自blog.csdn.net/miwanmeng/article/details/106556212