KooKing_L的博客

菜鸟终会翱翔

HashMap与HashTable

HashMap与HashTable都是用来存储key-value键值对元素的集合

一、相同点

  • 都是用来存储key-value键值对元素
  • 都不能存储重复的key
  • 存储的元素都不是有序的,是无序集合
  • 都是Map接口的具体实现类,如下图
    这里写图片描述

  • 底层都使用 Entry< K,V>[] table 数组存储元素

public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable {

    /**
     * The hash table data.
     */
    private transient Entry<K,V>[] table;
public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable
{

    /**
     * The table, resized as necessary. Length MUST Always be a power of two.
     */
    transient Entry<K,V>[] table;

(注:Entry< K,V> 是HashMap的内部类,Entry类似一个单向链表)

static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        Entry<K,V> next;
        int hash;

        /**
         * Creates new entry.
         */
        Entry(int h, K k, V v, Entry<K,V> n) {
            value = v;
            next = n;
            key = k;
            hash = h;
        }

二、区别

1、结构上的不同

  • HashMap允许存储null元素,包括key为null和value为null(由于Map里的key不能重复,所以HashMap里最多只有一对key-value对的key为null,但可以有无数多项key-value对的value为null。),而Hashtable不能存储null元素(key和value都不能为null)
  • HashMap继承了抽象类AbstractMap,而Hashtable继承了Dictionary类

2、性能上的不同

  • HashMap是非线程安全的,而Hashtable是线程安全的,Hashtable的方法使用关键字synchronized,能保证线程的同步
  • 所以HashMap的效率比Hashtable的效率高

所以在使用Map集合时,建议默认使用HashMap,若涉及线程同步或多线程,则使用Hashtable(其实应该使用ConcurrentHashMap,在保证线程安全的情况下,它的效率比Hashtable的效率高16倍以上,这里不展开叙述)

阅读更多
版权声明:本文为博主原创文章,若转载请声明出处 https://blog.csdn.net/KooKing_L/article/details/80330894
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

HashMap与HashTable

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭