Java Hashtable
Java哈希表类实现了一个哈希表,该哈希表将键映射到值。它继承了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 : 这是此Map维护的键的类型。
V : 这是映射值的类型。
Java Hashtable类的构造函数
构造函数 |
说明 |
Hashtable() |
它将创建一个具有初始默认容量和负载因子的空哈希表。 |
Hashtable(int capacity) |
它接受一个整数参数并创建一个包含指定初始容量的哈希表。 |
Hashtable(int capacity, float loadFactor) |
它用于创建具有指定初始容量和loadFactor的哈希表。 |
Hashtable(Map
t) |
它将创建一个具有与给定Map相同映射关系的新哈希表。 |
Java Hashtable类的方法
方法 |
说明 |
void clear() |
它用于重置哈希表。 |
Object clone() |
它返回哈希表的浅表副本。 |
V compute(K key, BiFunction
remappingFunction) |
它用于计算指定键及其当前映射值的映射(如果没有当前映射,则为null)。 |
V computeIfAbsent(K key, Function
mappingFunction) |
如果指定的键尚未与值关联(或已映射为null),则使用给定的映射函数计算其值,除非为null,否则将其输入到此映射中。 |
V computeIfPresent(K key, BiFunction
remappingFunction) |
如果指定键的值存在且不为空,则用于给定键及其当前映射值的情况下计算新映射。 |
Enumeration elements() |
它返回哈希表中值的枚举。 |
Set
> entrySet()
|
它返回Map中包含的映射的设置视图。 |
boolean equals(Object o) |
用于将指定对象与Map进行比较。 |
void forEach(BiConsumer
action) |
它将对映射中的每个条目执行给定的操作,直到处理完所有条目或该操作引发异常为止。 |
V getOrDefault(Object key, V defaultValue) |
它返回指定键所映射到的值,如果映射不包含该键的映射,则返回defaultValue。 |
int hashCode() |
它返回Map的哈希码值 |
Enumeration
<K>
keys()
|
它返回哈希表中键的枚举。 |
Set
<K>
keySet()
|
它返回Map中包含的键的Set视图。 |
V merge(K key, V value, BiFunction
remappingFunction) |
如果指定的键尚未与某个值关联或与null关联,请将其与给定的非null值关联。 |
V put(K key, V value) |
它将在哈希表中插入具有指定键的指定值。 |
void putAll(Map
t)) |
用于将所有键值对从map复制到哈希表。 |
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
function) |
它将所有条目的值替换为对该条目调用给定函数的结果,直到处理完所有条目或该函数引发异常为止。 |
String toString() |
它返回Hashtable对象的字符串表示形式。 |
Collection values() |
它返回Map中包含的值的集合视图。 |
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哈希表示例: 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);
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哈希表示例: 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");
System.out.println(map.getOrDefault(101, "Not Found"));
System.out.println(map.getOrDefault(105, "Not Found"));
}
}
输出:
Java哈希表示例: 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);
map.putIfAbsent(104,"Gaurav");
System.out.println("Updated Map: "+map);
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哈希表示例: 书
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) {
Map<Integer,Book> map=new Hashtable<Integer,Book>();
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);
map.put(1,b1);
map.put(2,b2);
map.put(3,b3);
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