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倍以上,这里不展开叙述)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值