Java 集合框架Hashtable

原文:https://www.studytonight.com/java/hashtable-in-collection-framework.php

Java HashtableHashtable的一种实现,它以键值对的形式存储元素。它不允许空键和空值。它是 HashMap 的同步版本。

它扩展了字典类并实现了映射接口。下面给出了这个类的声明。

Hashtable声明

public class Hashtable<K,V>extends Dictionary<K,V>implements Map<K,V>, Cloneable, Serializable

要点

  • 它包含基于键的值。
  • 它包含独特的元素。
  • 它不允许空键或空值。
  • 它是同步的。
  • Hashtable的初始默认容量是 11。

在本教程中,我们将学习创建一个Hashtable,向其中添加新元素,遍历其元素等。

Hashtable构造器

| 构造器 | 描述 | | Hashtable() | 它创建一个空Hashtable,该Hashtable具有初始默认容量和负载系数。 | | Hashtable(整数容量) | 它接受一个整数参数,并创建一个包含指定初始容量的Hashtable。 | | Hashtable(整数容量,浮点加载因子) | 它用于创建具有指定初始容量和加载因子的Hashtable。 | | Hashtable(映射 extends K,? extends V> t) | 它使用与给定映射相同的映射创建一个新的Hashtable。 |

示例:创建Hashtable

让我们举一个例子来创建Hashtable,该Hashtable包含字符串和Integer类型对的元素。最初它是空的,所以如果我们打印它,它会显示空括号。我们将在下一个例子中学习添加元素。

  import java.util.*;

class Demo
{
  public static void main(String args[])
  {
    // Creating Hashtable
    Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();

    // Displaying Hashtable
    System.out.println(hashtable);

  }
}

{}

Hashtable方法

| 方法 | 描述 | | 清空() | 它清空了Hashtable。 | | 对象克隆() | 它返回Hashtable的一个浅拷贝。 | | v 计算(K 键,双功能 super K,? super V,? extends V>重映射功能) | 它计算指定键及其当前映射值的映射。 | | v 计算不存在(K 键,功能 super K,? extends V>映射功能) | 它使用给定的映射函数计算其值。 | | 枚举元素() | 它返回Hashtable中值的枚举。 | | Set > entrySet()</map.entry> | 它返回包含在映射中的映射的集合视图。 | | 布尔等于(对象 0) | 它将指定的对象与映射进行比较。 | | void forEach(双消费者〔t0〕行动) | 它对映射中的每个条目执行给定的操作,直到所有条目都已处理完毕,或者该操作引发异常。 | | v getordefault(对象键,V defaultValue) | 它返回指定键映射到的值,如果映射不包含键映射,则返回默认值。 | | int hashCode() | 它返回映射的哈希代码值 | | 枚举键() | 它返回Hashtable中键的枚举。 | | 设置键集() | 它返回映射中包含的键的集合视图。 | | V 合并(K 键,V 值,双功能 super V,? super V,? extends V>重映射功能) | 如果指定的键尚未与值相关联或与 null 相关联,则将其与给定的非 null 值相关联。 | | V 放(K 键,V 值) | 它在Hashtable中插入带有指定键的指定值。 | | 见 putAll(映射 extends K,? extends V> t) | 它用于将映射中的所有键值对复制到Hashtable中。 | | 电压值 | 如果指定的键还没有与值相关联(或者被映射为 null),则将它与给定值相关联并返回 null,否则返回当前值。 | | 布尔删除(对象键,对象值) | 它从Hashtable中移除具有关联的指定键的指定值。 | | 电压更换(K 键,电压值) | 它替换指定键的指定值。 | | toString()字符串 | 它返回Hashtable对象的字符串表示形式。 | | 集合值() | 它返回映射中包含的值的集合视图。 | | 布尔包含(对象值) | 如果Hashtable中存在与该值相等的值,则该方法返回 true,否则返回 false。 | | 布尔包含值(对象值) | 如果Hashtable中存在与该值相等的值,则该方法返回 true,否则返回 false。 | | 布尔包含键(对象键) | 如果Hashtable中存在与该键相等的键,则该方法返回 true,否则返回 false。 | | boolean isEmpty() | 如果Hashtable为空,此方法返回 true 如果至少包含一个键,则返回 false。 | | 受保护的空隙重新灰化() | 它用于增加Hashtable的大小并重新哈希其所有键。 | | 获取(对象键) | 此方法返回包含与键关联的值的对象。 | | 移除(对象键) | 它用于移除键及其值。此方法返回与键关联的值。 | | int 大小() | 此方法返回Hashtable中的条目数。 |

Hashtable添加元素

为了在Hashtable中插入元素,我们使用了put()方法来添加新元素。它需要两个参数:第一个是关键,第二个是价值。

  import java.util.*;

class Demo
{
  public static void main(String args[])
  {
    // Creating Hashtable
    Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
    // Adding elements
    hashtable.put("a",100);
    hashtable.put("b",200);
    hashtable.put("c",300);
    hashtable.put("d",400);
    // Displaying Hashtable
    System.out.println(hashtable);

  }
}

{b=200,a=100,d=400,c=300}

示例:不允许空值

由于Hashtable不允许空键或空值,因此强制插入空值会引发错误。见下面的例子。

  import java.util.*;

class Demo
{
  public static void main(String args[])
  {
    // Creating Hashtable
    Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
    // Adding elements
    hashtable.put("a",100);
    hashtable.put("b",200);
    hashtable.put("c",300);
    hashtable.put("d",400);
    hashtable.put(null, 0); // error: no null allowed
    // Displaying Hashtable
    System.out.println(hashtable);

  }
}

线程“main”Java . lang . nullpointerexception 中出现异常

示例:搜索关键字或值

Hashtable提供了各种方法,如contains()containsKey()等来搜索Hashtable中的元素。包含()方法搜索指定值,而containsKey()方法搜索指定键。

  import java.util.*;

class Demo
{
  public static void main(String args[])
  {
    // Creating Hashtable
    Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
    // Adding elements
    hashtable.put("a",100);
    hashtable.put("b",200);
    hashtable.put("c",300);
    hashtable.put("d",400);
    // Displaying Hashtable
    System.out.println(hashtable);
    // Search for a value
    boolean val = hashtable.contains(400);
    System.out.println("is 400 present: "+val);
    // Search for a key
    val = hashtable.containsKey("d");
    System.out.println("is d present: "+val);   
  }
}

{b=200,a=100,d=400,c=300}存在 400:真存在 d 存在:真

示例:遍历Hashtable

我们可以使用循环遍历Hashtable元素来访问它的元素,并获得所有可用元素的列表。

  import java.util.*;

class Demo
{
  public static void main(String args[])
  {
    // Creating Hashtable
    Hashtable<String,Integer> hashtable = new Hashtable<String,Integer>();
    // Adding elements
    hashtable.put("a",100);
    hashtable.put("b",200);
    hashtable.put("c",300);
    hashtable.put("d",400);
    // Traversing Hashtable
    for(Map.Entry<String, Integer> m : hashtable.entrySet()) {
      System.out.println(m.getKey()+" "+m.getValue());
    }   
  }
}

b 200 a 100 d 400 c 300