Hashtable
类实现了一个hash table
,它将键映射到值。任何非空对象都可以用作键或值。要成功地从哈希表中存储和检索对象,用作键的对象必须实现hashCode方法和equals方法。
HashTable 的特点:
同步的
。存储在哈希表
中。初始默认容量是11
,而loadFactor是0.75
。不提供任何枚举
,而Hashtable不提供快速失败枚举
。HashTable 的层次结构:
HashTable 的类声明:
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable
类型参数:
Hashtable类的构造函数:
Constructor | Description |
---|---|
Hashtable() | 它创建一个具有初始默认容量和负载因子的空哈希表。 |
Hashtable(int capacity) | 它接受一个整数参数,并创建一个包含指定初始容量的哈希表。 |
Hashtable(int capacity, float loadFactor) | 它用于创建一个具有指定初始容量和loadFactor的哈希表。 |
Hashtable(Map extends K,? extends V> t) | 它创建一个新的哈希表,具有与给定Map相同的映射。 |
为了向哈希表中添加元素,可以使用put()方法。但是,插入顺序不保留在哈希表中。在内部,为每个元素生成一个单独的散列,并基于这个散列对元素进行索引,以提高效率。
实例:
public static void main(String[] args) {
Hashtable<Integer, String> ht1 = new Hashtable<>();
Hashtable<Integer, String> ht2 = new Hashtable<Integer, String>();
// 添加元素
ht1.put(1, "深圳");
ht1.put(2, "广州");
ht1.put(3, "珠海");
ht2.put(1, "佛山");
ht2.put(2, "惠州");
ht2.put(3, "江门");
// Print mappings to the console
System.out.println("集合1 : " + ht1);
System.out.println("集合2 : " + ht2);
}
输出:
集合1 : {3=珠海, 2=广州, 1=深圳}
集合2 : {3=江门, 2=惠州, 1=佛山}
添加元素之后,如果我们希望更改元素,可以使用put()方法再次添加元素。由于哈希表中的元素是使用键建立索引的,因此键的值可以通过简单地插入我们希望更改的键的更新值来更改。
实例:
public static void main(String[] args) {
Hashtable<Integer, String> ht1 = new Hashtable<>();
// 添加元素
ht1.put(1, "深圳");
ht1.put(2, "广州");
ht1.put(3, "珠海");
System.out.println("修改前: " + ht1);
ht1.put(2,"佛山");
System.out.println("修改后 : " + ht1);
}
输出:
修改前: {3=珠海, 2=广州, 1=深圳}
修改后 : {3=珠海, 2=佛山, 1=深圳}
为了从Map中删除一个元素,我们可以使用remove()方法。此方法获取键值,并从该映射中移除某个键的映射(如果该键在映射中存在)。
实例:
public static void main(String[] args) {
Hashtable<Integer, String> ht1 = new Hashtable<>();
// 添加元素
ht1.put(1, "深圳");
ht1.put(2, "广州");
ht1.put(3, "珠海");
System.out.println("删除前: " + ht1);
ht1.remove(2);
System.out.println("删除后 : " + ht1);
}
输出:
删除前: {3=珠海, 2=广州, 1=深圳}
删除后 : {3=珠海, 1=深圳}
为了迭代该表,我们可以使用高级的for循环。
实例:
public static void main(String[] args) {
Hashtable<Integer, String> ht1 = new Hashtable<>();
// 添加元素
ht1.put(1, "深圳");
ht1.put(2, "广州");
ht1.put(3, "珠海");
System.out.println("集合1: " + ht1);
// for-each 循环
for (Map.Entry<Integer, String> e : ht1.entrySet())
System.out.println(e.getKey() + " "
+ e.getValue());
}
输出:
集合1: {3=珠海, 2=广州, 1=深圳}
3 珠海
2 广州
1 深圳
待续
待续