美文网首页
Hash数据结构

Hash数据结构

作者: 琳子baby | 来源:发表于2018-07-13 14:38 被阅读9次

    HashMap

    实现原理

    image.png

    hashmap是由数组和链表共同组成的,数组的特点是插入慢读取快,链表的特点是插入快读取慢,hashmap结合两者优势,插入读取速度快。
    先介绍一下Entry,Entry包括key、value、hash、next。
    在put过程中,首先计算key的hash值,再根据hash及数组长度,算出当前key、value属于数组中的哪个元素,若此位置中没有元素则直接插入,若有元素则先根据hash值及key的值是否相等来决定是否替换当前已存在的value,若相等则替换,若不相等则将put的key、value放入当前数组中,并将原来的值作为next放入Entry中。
    若key为null,则将此元素放置在数组的首位置,即table[0]。
    get比较简单,通过key的hash和值来判断,先在数组中寻找,接着通过循环数组中的链表,不断获取Entry的next寻找,直接返回匹配的value。

    HashMap不是同步的

    HashSet

    HashSet内部实现的是HashMap,其构造函数如下:

    public HashSet() {
            map = new HashMap<>();
        }
    

    add:

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
    

    remove:

    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }
    

    contains:

    public boolean contains(Object o) {
        return map.containsKey(o);
    }
    

    HashTable

    HashTable和HashMap差不多
    不同点:
    1、HashMap继承AbstractMap,HashTable继承Dictionary
    2、HashMap允许key,value为null,HashTable不允许
    3、HashMap线程不安全,HashTable安全,内部方法是synchronized,可多个线程使用

    相关文章

      网友评论

          本文标题:Hash数据结构

          本文链接:https://www.haomeiwen.com/subject/bailuftx.html