HashMap的:
HashMap的是基于哈希表的地图接口的实现,继承自AbstractMap接口,它提供所有可选的映射操作,内部用“套”对键进行散列排放,根据键去取值的效率很高
public class m1 {
public void a() {
Map<String, Object> hashmap = new HashMap<String, Object>();
// 存放对象用put方法,所存的一定是键值对
hashmap.put("1", "A");
hashmap.put("2", "B");
hashmap.put("3", "C");
hashmap.put("4", "D");
System.out.println(hashmap.size());
System.out.println(hashmap.keySet());
System.out.println(hashmap.values());
System.out.println(hashmap);
Object object = hashmap.get("B");
hashmap.put("2", "改变");
System.out.println(hashmap);
// 该容器尤其内部的排序方式,是根据哈希算法来排序的
Set set = hashmap.keySet();
// 获取全部键,返回类型是set
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(hashmap.get(iterator.next()));
}
}
public static void main(String[] args) {
new m1().a();
}
}
哈希表:
该类实现了一个哈希表,它将键映射到值。任何非null
对象都可以用作键值或值;为了从散列表成功存储和检索对象,用作键的对象必须实现hashCode
方法和equals
方法; Hashtable
一个实例有两个影响其性能的参数:初始容量状语从句:负载因子 (初始容量只是创建³³哈希表时的容量)
添加元素也用放方法(加入一个键值对)
详细内容请参考:http://tool.oschina.net/apidocs/apidoc?api = jdk-zh
区别:
- 所继承的父类不同:HashMap中是继承自AbstractMap类,而散列表是继承自字典类。
-
Hashtable比HashMap多提供了elments()和contains()两个方法;
-
Hashtable既不支持Null key也不支持Null值;而HashMap中,null可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为null
-
哈希表是线程安全的,HashMap的是线程不安全的
-
哈希表默认的初始大小为11,之后每次扩充,容量变为原来的2n + 1个; HashMap中默认的初始化大小为16之后每次扩充,容量变为原来的2倍。
-
HashMap为了得到元素的位置,首先需要根据元素的KEY计算出一个哈希值,然后再用这个哈希值来计算得到最终的位置。
Hashtable中直接使用对象的hashCode.hashCode是JDK根据对象的地址或者字符串或者数字算出来的INT类型的数值。然后再使用除留余数发来获得最终的位置。
-
HashMap中的迭代器(迭代器)是快速的迭代器,而哈希表的枚举迭代器不是快速的