Hashtable、HashMap、TreeMap都是最常见的Map接口的实现,是以键值对的形式存储和操作数据的容器类型。 Hashtable是早期Java类库提供的一个哈希表实现,本身是线程安全的,不支持null键和值。由于线程安全导致的性能开销,所以已经很少被推荐使用。 HashMap是应用更加广泛的哈希表实现,行为上大致与Hashtable一致,主要区别在...
ConcurrentHashMap 二、HashMap和HashTable之间的区别 1、定义 HashMap底层基于数组+单向链表(红黑树),非线程安全,允许有空的键和值 数组:Node<K,V> [] table ,每一个元素都是一个Node 单向链表:Node<K,V> next,当发生Hash碰撞,会追加链表,当链表长度大于8,那就转换为红黑树 HashTable底层基于哈希表实现,...
4)Hashtable使用Enumeration,HashMap使用Iterator。5)Hashtable和HashMap采用的hash/rehash算法都几乎一样,所以性能不会有很大的差异。6)在Hashtable中,hash数组默认大小是11,增加的方式是old×2+1。在HashMap中,hash数组的默认大小是16,而且一定是2的指数。7)hash值的使用不同,Hashtable直接使用对象的has...
Hashtable 与 HashMap类似,但是主要有6点不同。 1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。 2.HashTable不允许null值,key和value都不可以,HashMap允许null值,key和value都可以。HashMap允许key值只能由一个null值,因为hashmap如果key值相同,...
TreeMap是有序的,HashMap和HashTable是无序的。 Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。 这就意味着Hashtable是线程安全的,HashMap不是线程安全的。HashMap效率较高,Hashtable效率较低。 如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看Hashtable的源代码...
但是,HashTable比HashMap更严格,它不允许有任何储物柜是空的(也就是说,不允许null作为key或value),并且它是线程安全的,就像一个有保安的储物柜,多人同时找东西也不会混乱。所以,HashTable在多线程环境下更可靠,但因为有保安(同步锁),找东西可能稍微慢一点。
HashMapHashTable说明 无序的 无序的 HashMap继承了AbstractMap抽象类 HashTable继承了Dictionary抽象类 父类不同 HashMap 允许一个空键 (其他的空键会覆盖第一个空键)和 任意数量 的NULL值 HashTable 不允许 NULL值(包括键或值) <key, value>的NULL区别 方法是异步的(即,线程不安全,效率较高) 方法是同步...
HashMap和Hashtable的区别 1 HashMap不是线程安全的 hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。 2 HashTable是线程安全的一个Collection。
Hashtable与 HashMap类似。不同的是:它不允许记录的键或者值为空;它支持线程的同步(任一时刻只有一个线程能写Hashtable,即线程安全),因此也导致了 Hashtable 在写入时会比较慢。 TreeMap TreeMap实现SortMap接口,能够把它保存的记录根据键排序。 默认是按键的升序排序,也可以指定排序的比较器,当用Iterator 遍历Tr...
HashMap最多只允许一条记录的键为null,不允许多条记录的值为null。HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。l (2)Hashtable与HashMap类似,不同的是:它...