文章图片
Java HashMap类通过使用哈希表来实现map接口。它继承了AbstractMap类并实现Map接口。
要记住的要点
- Java HashMap类包含基于键的值。
- Java HashMap类仅包含唯一键。
- Java HashMap类可以具有一个null键和多个null值。
- Java HashMap类不同步。
- Java HashMap类不维护任何顺序。
- Java HashMap类的初始默认容量为16, 负载因子为0.75。
如上图所示, HashMap类扩展了AbstractMap类并实现了Map接口。
HashMap类声明
我们来看一下java.util.HashMap类的声明。
public class HashMap<
K, V>
extends AbstractMap<
K, V>
implements Map<
K, V>
, Cloneable, Serializable
HashMap类参数
【Java HashMap类】让我们看一下java.util.HashMap类的参数。
- K:这是此地图维护的键的类型。
- V:这是映射值的类型。
建设者 | 描述 |
---|---|
HashMap() | 它用于构造默认的HashMap。 |
HashMap(Map < ?扩展K , ?扩展V> m) | 它用于通过使用给定Map对象m的元素来初始化哈希图。 |
HashMap(int capacity) | 它用于将哈希映射的容量初始化为给定的整数值, 容量。 |
HashMap(int capacity, float loadFactor) | 它用于通过使用其参数来初始化哈希图的容量和负载因子。 |
方法 | 描述 |
---|---|
void clear() | 它用于从此映射中删除所有映射。 |
boolean isEmpty() | 如果此映射不包含键值映射, 则用于返回true。 |
Object clone() | 它用于返回此HashMap实例的浅表副本:键和值本身不会被克隆。 |
Set entrySet() | 它用于返回此映射中包含的映射的集合视图。 |
Set keySet() | 它用于返回此映射中包含的键的设置视图。 |
V put(Object key, Object value) | 它用于在地图中插入一个条目。 |
void putAll(Map map) | 用于在地图中插入指定的地图。 |
V putIfAbsent(K key, V value) | 仅当尚未指定时, 才将指定值和指定键插入映射中。 |
V remove(Object key) | 用于删除指定键的条目。 |
boolean remove(Object key, Object value) | 它从映射中删除具有关联的指定键的指定值。 |
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) | 如果指定键的值存在且不为空, 则用于给定键及其当前映射值的情况下计算新映射。 |
boolean containsValue(Object value) | 如果映射中存在等于该值的值, 则此方法返回true, 否则返回false。 |
boolean containsKey(Object key) | 如果映射中存在等于该键的某个键, 则此方法返回true, 否则返回false。 |
boolean equals(Object o) | 用于将指定的Object与Map进行比较。 |
void forEach(BiConsumer < ?super K, ?super V> 操作) | 它对映射中的每个条目执行给定的操作, 直到所有条目都已处理或该操作引发异常为止。 |
V get(Object key) | 此方法返回包含与键关联的值的对象。 |
V getOrDefault(Object key, V defaultValue) | 它返回指定键映射到的值, 如果映射不包含键的映射, 则返回defaultValue。 |
boolean isEmpty() | 如果映射为空, 则此方法返回true;否则, 返回false。如果包含至少一个密钥, 则返回false。 |
V merge(K键, V值, BiFunction < ?super V, ?super V, ?extended V> remappingFunction) | 如果指定的键尚未与值关联或与null关联, 请将其与给定的非null值关联。 |
V replace(K key, V value) | 它将指定的值替换为指定的键。 |
boolean replace(K key, V oldValue, V newValue) | 它用指定键的新值替换旧值。 |
void replaceAll(BiFunction < ?super K, ?super V, ?extended V> 函数) | 它用在该条目上调用给定函数的结果替换每个条目的值, 直到处理完所有条目或该函数引发异常为止。 |
Collection< V> values() | 它返回映射中包含的值的集合视图。 |
int size() | 此方法返回映射中的条目数。 |
在这里, 我们看到了插入元素的不同方法。
import java.util.*;
class HashMap1{
public static void main(String args[]){
HashMap<
Integer, String>
hm=new HashMap<
Integer, String>
();
System.out.println("Initial list of elements: "+hm);
hm.put(100, "Amit");
hm.put(101, "Vijay");
hm.put(102, "Rahul");
System.out.println("After invoking put() method ");
for(Map.Entry m:hm.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}hm.putIfAbsent(103, "Gaurav");
System.out.println("After invoking putIfAbsent() method ");
for(Map.Entry m:hm.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
HashMap<
Integer, String>
map=new HashMap<
Integer, String>
();
map.put(104, "Ravi");
map.putAll(hm);
System.out.println("After invoking putAll() method ");
for(Map.Entry m:map.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
Initial list of elements: {}
After invoking put() method
100 Amit
101 Vijay
102 Rahul
After invoking putIfAbsent() method
100 Amit
101 Vijay
102 Rahul
103 Gaurav
After invoking putAll() method
100 Amit
101 Vijay
102 Rahul
103 Gaurav
104 Ravi
Java HashMap示例, 以remove()元素
在这里, 我们看到了删除元素的不同方法。
import java.util.*;
public class HashMap2 {
public static void main(String args[]) {
HashMap<
Integer, String>
map=new HashMap<
Integer, String>
();
map.put(100, "Amit");
map.put(101, "Vijay");
map.put(102, "Rahul");
map.put(103, "Gaurav");
System.out.println("Initial list of elements: "+map);
//key-based removal
map.remove(100);
System.out.println("Updated list of elements: "+map);
//value-based removal
map.remove(101);
System.out.println("Updated list of elements: "+map);
//key-value pair based removal
map.remove(102, "Rahul");
System.out.println("Updated list of elements: "+map);
}
}
输出:
Initial list of elements: {100=Amit, 101=Vijay, 102=Rahul, 103=Gaurav}
Updated list of elements: {101=Vijay, 102=Rahul, 103=Gaurav}
Updated list of elements: {102=Rahul, 103=Gaurav}
Updated list of elements: {103=Gaurav}
Java HashMap示例替换()元素
在这里, 我们看到了替换元素的不同方法。
import java.util.*;
class HashMap3{
public static void main(String args[]){
HashMap<
Integer, String>
hm=new HashMap<
Integer, String>
();
hm.put(100, "Amit");
hm.put(101, "Vijay");
hm.put(102, "Rahul");
System.out.println("Initial list of elements:");
for(Map.Entry m:hm.entrySet())
{
System.out.println(m.getKey()+" "+m.getValue());
}
System.out.println("Updated list of elements:");
hm.replace(102, "Gaurav");
for(Map.Entry m:hm.entrySet())
{
System.out.println(m.getKey()+" "+m.getValue());
}
System.out.println("Updated list of elements:");
hm.replace(101, "Vijay", "Ravi");
for(Map.Entry m:hm.entrySet())
{
System.out.println(m.getKey()+" "+m.getValue());
}
System.out.println("Updated list of elements:");
hm.replaceAll((k, v) ->
"Ajay");
for(Map.Entry m:hm.entrySet())
{
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
Initial list of elements:
100 Amit
101 Vijay
102 Rahul
Updated list of elements:
100 Amit
101 Vijay
102 Gaurav
Updated list of elements:
100 Amit
101 Ravi
102 Gaurav
Updated list of elements:
100 Ajay
101 Ajay
102 Ajay
HashSet和HashMap之间的区别
HashSet仅包含值, 而HashMap包含条目(键和值)。
Java HashMap示例:书籍
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 MapExample {
public static void main(String[] args) {
//Creating map of Books
Map<
Integer, Book>
map=new HashMap<
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);
}
}
}
输出:
1 Details:
101 Let us C Yashwant Kanetkar BPB 8
2 Details:
102 Data Communications &
Networking Forouzan Mc Graw Hill 4
3 Details:
103 Operating System Galvin Wiley 6
推荐阅读
- Java HashSet
- Java EnumSet类
- Java EnumMap类
- Java Deque接口
- Java Collections类
- Java ArrayList类
- 适用于PS4的12大最佳游戏键盘推荐合集(你最喜欢哪一款())
- 如何修复NVIDIA GeForce Experience错误代码0x0003(解决方法)
- 如何修复Windows 10缺少硬件和设备疑难解答(解决办法)