登录
  • #刷题
  • #学java/c#

Ha‌‌‌‌‍‍‌‍‌‌‍‍‍‌‌‌‌‍‌‌‍‍‍‌‍‍‍‌‍‍‍‌shTable vs. HashMap vs. HashSet对比总结【JAVA】

CSTeen
1695
3
首先对比一下hashtable 跟hashmap,hashmap是新的hashtable,可以作为hashtable的替代品。其主要区别是,hashtable是synchronized的,而hashmap则是默认非同步的,这样,在多线程的情况下hashtable可以直接使用,而hashmap则需要通过一个静态声明解决:Map.Collections.SynchronizedMap(Map m), 这个方法就会返回一个同步的hashmap(这点跟vector与arraylist的区别有点像)。但同步数据结构需要更多系统资源,所以一般情况下就选择hashmap即可。

其次,hashmap可以用null值作为其value或key,但主要在判断是否存在null的key时不能用get,因为不存在时也会返回null,所以要用containsKey()。hashtable 则不允许null值。另外hashtable的hash数组大小默认为11,且增大方式为 N*2 + 1。hashmap的大小默认为16,且固定为2的指数。

然后是hashset与hashmap的区别,hashset只需要一个对象作为元素,内部实现还是hashmap,类似:

public boolean (object o) {

return map.put(o, PRESENT) == null;

}

基本的就这些,欢迎指正补充

——————————————————————————方法总结————————————————————————————————

常用方法:

HashMap

clear();

containsKey(), containsValue();

get(); // get() == containsValue()

isEmpty();

remove();

put();

size();

entrySet(), keySet();

*********************************************************************

HashTable

clear();

contains(), containsKey();

get();

hashCode();

entrySet(), keySet();

isEmpty();

merge();

put();

remove();

replace();

size();

toString();

*********************************************************************

HashSet()

add();

clear();

contains();

isEmpty();

iterator();

remove();

size();

________________________________________________________________________________________________________
3条回复
热度排序

发表回复