Java Hashtable类

Java Hashtable类实现了一个哈希表, 该哈希表将键映射到值。它继承了Dictionary类并实现Map接口。
要记住的要点

  • 哈希表是列表的数组。每个列表称为存储桶。桶的位置通过调用hashcode()方法来标识。哈希表包含基于键的值。
  • Java Hashtable类包含唯一的元素。
  • Java Hashtable类不允许空键或空值。
  • Java Hashtable类已同步。
  • Hashtable类的初始默认容量为11, 而loadFactor为0.75。
哈希表类声明
【Java Hashtable类】我们来看一下java.util.Hashtable类的声明。
public class Hashtable< K, V> extends Dictionary< K, V> implements Map< K, V> , Cloneable, Serializable

哈希表类参数
让我们看一下java.util.Hashtable类的参数。
  • K:这是此地图维护的键的类型。
  • V:这是映射值的类型。
Java Hashtable类的构造方法
建设者 描述
Hashtable() 它创建一个具有初始默认容量和负载因子的空哈希表。
Hashtable(int capacity) 它接受一个整数参数, 并创建一个包含指定初始容量的哈希表。
Hashtable(int capacity, float loadFactor) 它用于创建具有指定初始容量和loadFactor的哈希表。
Hashtable(Map < ?扩展K , ?扩展V> t) 它使用与给定Map相同的映射创建一个新的哈希表。
Java Hashtable类的方法
方法 描述
void clear() 它用于重置哈希表。
Object clone() 它返回哈希表的浅表副本。
V计算(K键, BiFunction < ?超级K , ?超级V , ?扩展V> remappingFunction) 它用于计算指定键及其当前映射值的映射(如果没有当前映射, 则为null)。
V computeIfAbsent(K键, Function < ?超级K , ?扩展V> mappingFunction) 如果指定的键尚未与值关联(或已映射为null), 则使用给定的映射函数计算它的值, 除非为null, 否则将其输入到此映射中。
VcomputeIfPresent(K键, BiFunction < ?super K, ?super V, ?extended V> remappingFunction) 如果指定键的值存在且不为空, 则用于给定键及其当前映射值的情况下计算新映射。
Enumeration elements() 它返回哈希表中值的枚举。
Set < Map.Entry < K, V > > entrySet() 它返回映射中包含的映射的设置视图。
boolean equals(Object o) 用于将指定的Object与Map进行比较。
void forEach(BiConsumer < ?super K, ?super V> 操作) 它对映射中的每个条目执行给定的操作, 直到所有条目都已处理或该操作引发异常为止。
V getOrDefault(Object key, V defaultValue) 它返回指定键映射到的值, 如果映射不包含键的映射, 则返回defaultValue。
int hashCode() 它返回Map的哈希码值
枚举< K> keys() 它返回哈希表中键的枚举。
Set< K> keySet() 它返回地图中包含的键的Set视图。
V merge(K键, V值, BiFunction < ?super V, ?super V, ?extended V> remappingFunction) 如果指定的键尚未与值关联或与null关联, 请将其与给定的非null值关联。
V put(K key, V value) 它在哈希表中插入具有指定键的指定值。
void putAll(Map < ?扩展K , ?扩展V> t)) 它用于将所有键值对从map复制到hashtable。
V putIfAbsent(K key, V value) 如果指定的键尚未与值关联(或映射为null), 则将其与给定值关联并返回null, 否则返回当前值。
boolean remove(Object key, Object value) 它从哈希表中删除具有关联的指定键的指定值。
V replace(K key, V value) 它将指定的值替换为指定的键。
boolean replace(K key, V oldValue, V newValue) 它用指定键的新值替换旧值。
void replaceAll(BiFunction < ?super K, ?super V, ?extended V> 函数) 它用在该条目上调用给定函数的结果替换每个条目的值, 直到处理完所有条目或该函数引发异常为止。
String toString() 它返回Hashtable对象的字符串表示形式。
Collection values() 它返回映射中包含的值的集合视图。
boolean contains(Object value) 如果哈希表中存在等于该值的值, 则此方法返回true, 否则返回false。
boolean containsValue(Object value) 如果哈希表中存在等于该值的值, 则此方法返回true, 否则返回false。
boolean containsKey(Object key) 如果哈希表中存在与该键相等的某个键, 则此方法返回true, 否则返回false。
boolean isEmpty() 如果哈希表为空, 则此方法返回true;否则, 此方法返回true。如果包含至少一个密钥, 则返回false。
protected void rehash() 它用于增加哈希表的大小并重新哈希其所有键。
V get(Object key) 此方法返回包含与键关联的值的对象。
V remove(Object key) 它用于删除密钥及其值。此方法返回与键关联的值。
int size() 此方法返回哈希表中的条目数。
Java哈希表示例
import java.util.*; class Hashtable1{ public static void main(String args[]){ Hashtable< Integer, String> hm=new Hashtable< Integer, String> (); hm.put(100, "Amit"); hm.put(102, "Ravi"); hm.put(101, "Vijay"); hm.put(103, "Rahul"); for(Map.Entry m:hm.entrySet()){ System.out.println(m.getKey()+" "+m.getValue()); } } }

立即测试
输出:
103 Rahul 102 Ravi 101 Vijay 100 Amit

Java Hashtable示例:remove()
import java.util.*; public class Hashtable2 { public static void main(String args[]) { Hashtable< Integer, String> map=new Hashtable< Integer, String> (); map.put(100, "Amit"); map.put(102, "Ravi"); map.put(101, "Vijay"); map.put(103, "Rahul"); System.out.println("Before remove: "+ map); // Remove value for key 102 map.remove(102); System.out.println("After remove: "+ map); } }

输出:
Before remove: {103=Rahul, 102=Ravi, 101=Vijay, 100=Amit} After remove: {103=Rahul, 101=Vijay, 100=Amit}

Java Hashtable示例:getOrDefault()
import java.util.*; class Hashtable3{ public static void main(String args[]){ Hashtable< Integer, String> map=new Hashtable< Integer, String> (); map.put(100, "Amit"); map.put(102, "Ravi"); map.put(101, "Vijay"); map.put(103, "Rahul"); //Here, we specify the if and else statement as arguments of the method System.out.println(map.getOrDefault(101, "Not Found")); System.out.println(map.getOrDefault(105, "Not Found")); } }

输出:
Vijay Not Found

Java Hashtable示例:putIfAbsent()
import java.util.*; class Hashtable4{ public static void main(String args[]){ Hashtable< Integer, String> map=new Hashtable< Integer, String> (); map.put(100, "Amit"); map.put(102, "Ravi"); map.put(101, "Vijay"); map.put(103, "Rahul"); System.out.println("Initial Map: "+map); //Inserts, as the specified pair is unique map.putIfAbsent(104, "Gaurav"); System.out.println("Updated Map: "+map); //Returns the current value, as the specified pair already exist map.putIfAbsent(101, "Vijay"); System.out.println("Updated Map: "+map); } }

输出:
Initial Map: {103=Rahul, 102=Ravi, 101=Vijay, 100=Amit} Updated Map: {104=Gaurav, 103=Rahul, 102=Ravi, 101=Vijay, 100=Amit} Updated Map: {104=Gaurav, 103=Rahul, 102=Ravi, 101=Vijay, 100=Amit}

Java Hashtable示例:书
import java.util.*; class Book { int id; String name, author, publisher; int quantity; public Book(int id, String name, String author, String publisher, int quantity) { this.id = id; this.name = name; this.author = author; this.publisher = publisher; this.quantity = quantity; } } public class HashtableExample { public static void main(String[] args) { //Creating map of Books Map< Integer, Book> map=new Hashtable< Integer, Book> (); //Creating Books Book b1=new Book(101, "Let us C", "Yashwant Kanetkar", "BPB", 8); Book b2=new Book(102, "Data Communications & Networking", "Forouzan", "Mc Graw Hill", 4); Book b3=new Book(103, "Operating System", "Galvin", "Wiley", 6); //Adding Books to map map.put(1, b1); map.put(2, b2); map.put(3, b3); //Traversing map for(Map.Entry< Integer, Book> entry:map.entrySet()){ int key=entry.getKey(); Book b=entry.getValue(); System.out.println(key+" Details:"); System.out.println(b.id+" "+b.name+" "+b.author+" "+b.publisher+" "+b.quantity); } } }

输出:
3 Details: 103 Operating System Galvin Wiley 6 2 Details: 102 Data Communications & Networking Forouzan Mc Graw Hill 4 1 Details: 101 Let us C Yashwant Kanetkar BPB 8

    推荐阅读