Java HashMap
Java HashMap类实现了Map接口,该接口允许我们存储键和值对,其中键应该是唯一的。如果尝试插入重复密钥,它将替换相应密钥的元素。使用键索引进行更新,删除等操作很容易。HashMap类可在 java.util 包中找到。
Java中的HashMap类似于旧式Hashtable类,但未同步。它也允许我们存储null元素,但是应该只有一个null键。从Java 5开始,它表示为 HashMap<K,V> ,其中K代表键,V代表值。它继承了AbstractMap类并实现了Map接口。
要记住的要点
Java HashMap包含基于键的值。
Java HashMap仅包含唯一键。
Java HashMap可能具有一个null键和多个null值。
Java HashMap不同步。
Java HashMap不维护任何顺序。
Java HashMap类的初始默认容量为16,负载因子为0.75。
HashMap类的层次结构
如上图所示,HashMap类扩展了AbstractMap类并实现了Map接口。
HashMap类声明
让我们看看java.util.HashMap类的声明。
public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable
HashMap类参数
让我们看一下java.util.HashMap类的参数。
K : 这是此Map维护的键的类型。
V : 这是映射值的类型。
Java HashMap类的构造函数
构造函数 |
说明 |
HashMap() |
它用于构造默认的HashMap。 |
HashMap(Map<? extends K,? extends V> m) |
它用于通过使用给定Map对象m的元素来初始化哈希图。 |
HashMap(int capacity) |
用于将哈希映射的容量初始化为给定的整数值,容量。 |
HashMap(int capacity, float loadFactor) |
它用于通过使用其参数来初始化哈希图的容量和负载因子。 |
Java HashMap类的方法
方法 |
说明 |
void clear() |
它用于从此Map中删除所有映射。 |
boolean isEmpty() |
如果此映射不包含键-值映射,则用于返回true。 |
Object clone() |
它用于返回此HashMap实例的浅表副本: 键和值本身不会被克隆。 |
Set entrySet() |
它用于返回此映射中包含的映射的集合视图。 |
Set keySet() |
它用于返回此映射中包含的键的设置视图。 |
V put(Object key, Object value) |
它用于在Map中插入一个条目。 |
void putAll(Map map) |
它用于在Map中插入指定的Map。 |
V putIfAbsent(K key, V value) |
仅当尚未将指定值和指定键插入映射时,才将其插入。 |
V remove(Object key) |
它用于删除指定键的条目。 |
boolean remove(Object key, Object value) |
它会从Map中删除具有关联的指定键的指定值。 |
V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) |
它用于计算指定键及其当前映射值的映射(如果没有当前映射,则为null)。 |
V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) |
如果指定的键尚未与值关联(或已映射为null),则使用给定的映射函数计算其值,除非为null,否则将其输入到此映射中。 |
V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) |
如果指定键的值存在且不为空,则用于给定键及其当前映射值的情况下计算新映射。 |
boolean containsValue(Object value) |
如果映射中存在等于该值的值,则此方法返回true,否则返回false。 |
boolean containsKey(Object key) |
如果Map中存在等于该键的某个键,则此方法返回true,否则返回false。 |
boolean equals(Object o) |
用于将指定对象与Map进行比较。 |
void forEach(BiConsumer<? super K,? super V> action) |
它将对映射中的每个条目执行给定的操作,直到处理完所有条目或该操作引发异常为止。 |
V get(Object key) |
此方法返回包含与键关联的值的对象。 |
V getOrDefault(Object key, V defaultValue) |
它返回指定键所映射到的值,如果映射不包含该键的映射,则返回defaultValue。 |
boolean isEmpty() |
如果映射为空,则此方法返回true;否则为false。如果包含至少一个密钥,则返回false。 |
V merge(K key, V value, BiFunction<? super V,? super V,? extends 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,? extends V> function) |
它将所有条目的值替换为对该条目调用给定函数的结果,直到处理完所有条目或该函数引发异常为止。 |
Collection values() |
它返回Map中包含的值的集合视图。 |
int size() |
此方法返回Map中的条目数。 |
Java HashMap示例
让我们看一个简单的HashMap示例来存储键和值对。
import java.util.*;
public class HashMapExample1{
public static void main(String args[]){
HashMap<Integer,String>map=new HashMap<Integer,String>();
map.put(1,"Mango");
Map map.put(2,"Apple");
map.put(3,"Banana");
map.put(4,"Grapes");
System.out.println("Iterating Hashmap...");
for(Map.Entry m : map.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
Iterating Hashmap...
1 Mango
2 Apple
3 Banana
4 Grapes
在此示例中,我们将Integer作为键存储,将String作为值存储,因此我们将 HashMap<Integer,String> 作为类型。 put()方法将元素插入到Map中。
要获取键和值元素,我们应该调用getKey()和getValue()方法。 Map.Entry 接口包含 getKey()和 getValue()方法。但是,我们应该调用Map接口的entrySet()方法来获取Map.Entry的实例。
HashMap上没有重复键
您不能存储重复键HashMap中的键。但是,如果您尝试将重复的键存储为另一个值,它将替换该值。
import java.util.*;
public class HashMapExample2{
public static void main(String args[]){
HashMap<Integer,String>map=new HashMap<Integer,String>();
HashMap map.put(1,"Mango");
Map map.put(2,"Apple");
map.put(3,"Banana");
map.put(1,"Grapes");
System.out.println("Iterating Hashmap...");
for(Map.Entry m : map.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
Iterating Hashmap...
1 Grapes
2 Apple
3 Banana
添加()元素的Java HashMap示例
在这里,我们看到了插入元素的不同方法。
import java.util.*;
class HashMap1{
public static void main(String args[]){
HashMap<Integer,String>map=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示例
在这里,我们看到了删除元素的不同方法。
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);
map.remove(100);
System.out.println("Updated list of elements: "+map);
map.remove(101);
System.out.println("Updated list of elements: "+map);
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>map=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) {
Map<Integer,Book> map=new HashMap<Integer,Book>();
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);
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);
}
}
}
输出:
1 Details:
101 Let us C Yashwant Kanetkar BPB 8
2 Details:
102 Data Communications and Networking Forouzan Mc Graw Hill 4
3 Details:
103 Operating System Galvin Wiley 6
相关主题
如何在Java中迭代Map</a>
如何在Java中对HashMap进行排序
HashMap中的负载因子
Java中HashMap的工作方式
HashMap与Hashtable之间的区别
如何按值对HashMap进行排序
HashSet之间的差异和HashMap</a>
HashMap与TreeMap之间的区别
Java Map接口