个性化阅读
专注于IT技术分析

Java Hashtable类

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

要记住的要点

  • 哈希表是列表的数组。每个列表称为存储桶。桶的位置通过调用hashcode()方法来标识。哈希表包含基于键的值。
  • Java Hashtable类包含唯一的元素。
  • Java Hashtable类不允许空键或空值。
  • Java Hashtable类已同步。
  • Hashtable类的初始默认容量为11, 而loadFactor为0.75。

哈希表类声明

我们来看一下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
赞(0)
未经允许不得转载:srcmini » Java Hashtable类

评论 抢沙发

评论前必须登录!