Hashtable(哈希表) 也可以叫做散列表,是根据关键码值(Key value)而直接进行访问的数据结构,通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
通过代码来理解:
Hashtable
public static void main(String[] args) {
Hashtable ht=new Hashtable();
ht.put("aaa","hash");
ht.put("bbb","table");
System.out.println(ht.get("bbb"));
}
上面代码中通过put(key,value)的方式把值存进对应的键中,再通过put(key)的方式把键中的值拿出来(通过访问key,拿到value,就是通过这种方式加快访问速度)。
创建Hashtable对象
1.public Hashtable()
构造一个新的,空的散列表,默认初始容量(11)和负载因子(0.75)。
通过源代码来理解:
使用Hashtable()时,代码会用 this(11,0.75f) 去指向 Hashtable(int initialCapacity, float loadFactor),可以理解成不填入初始容量和负载因子,代码会给你个默认值(初始容量默认11,负载因子默认0.75)。
注:源代码中都存在着一些方便理解的注释(英文不好只能靠翻译了)。
2.public Hashtable(int initialCapacity)
通过源代码来理解:
使用Hashtable(int initialCapacity)时,代码会用 this(initialCapacity,0.75f) 去指向 Hashtable(int initialCapacity, float loadFactor),可以理解成只填入初始容量,代码会给你个补充一个负载因子的默认值(初始容负载因子默认0.75)。
3. public Hashtable(int initialCapacity, float loadFactor)
通过源代码来理解:
使用Hashtable(int initialCapacity, float loadFactor)时,代码会检查初始容量是否小于0、加载因子小于等于0、加载因子是否是NAN,符合则会抛出IllegalArgumentException异常(如果对Float.isNaN()有疑惑可以看看这篇博客:从源码的角度分析 Java 中的 Float.isNaN() )
初始容量为0的话,代码会给初始容量赋值1
知识点: 1.初始容量不能小于0
2.负载因子不能小于等于0
3.负载因子不能是非数字(NaN) 例如:0.0f/0.0f 或者 sqrt(-1)
初始容量控制了浪费空间与需要rehash
操作之间的折中,这是耗时的。 没有rehash
如果初始容量大于项Hashtable将其负载因子包含除以最大数量永远不会发生的操作。 然而,设置初始容量太高可能会浪费空间。
如果不需要线程安全的实现,建议使用HashMap代替Hashtable
。 如果需要线程安全的并发实现,那么建议使用ConcurrentHashMap
代替Hashtable
。
1.赋值
public static void main(String[] args) {
Hashtable ht=new Hashtable();
ht.put("aaa","hash");
ht.put("bbb","table");
System.out.println(ht);
}
2.清除
public static void main(String[] args) {
Hashtable ht=new Hashtable();
ht.put("aaa","hash");
ht.put("bbb","table");
ht.clear();
System.out.println(ht);
}
3.取值
public static void main(String[] args) {
Hashtable ht=new Hashtable();
ht.put("aaa","hash");
ht.put("bbb","table");
System.out.println(ht.get("bbb"));
}