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:这是映射值的类型。
建设者 | 描述 |
---|---|
Hashtable() | 它创建一个具有初始默认容量和负载因子的空哈希表。 |
Hashtable(int capacity) | 它接受一个整数参数, 并创建一个包含指定初始容量的哈希表。 |
Hashtable(int capacity, float loadFactor) | 它用于创建具有指定初始容量和loadFactor的哈希表。 |
Hashtable(Map < ?扩展K , ?扩展V> t) | 它使用与给定Map相同的映射创建一个新的哈希表。 |
方法 | 描述 |
---|---|
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
|
它返回哈希表中值的枚举。 |
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
|
它返回映射中包含的值的集合视图。 |
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() | 此方法返回哈希表中的条目数。 |
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
推荐阅读
- Java LinkedHashMap类
- Java HashSet
- Java HashMap类
- Java EnumSet类
- Java EnumMap类
- Java Deque接口
- Java Collections类
- Java ArrayList类
- 适用于PS4的12大最佳游戏键盘推荐合集(你最喜欢哪一款())