Java –从值HashMap获取键
本文介绍了几种从HashMap中的值获取键的方法。
1. HashMap的键和值可以包含null
2.从HashMap获取所有键– keySet()
3.从HashMap中的值获取键
4.从HashMap(Java 8 Stream)中的值获取键
5. HashMap只有一项
hashmap-can-contain-null-for-key-and-value">1. HashMap的键和值可以包含null
当我们创建一种从HashMap中的值查找键的方法时,我们必须注意以下问题:
HashMap可以包含null用于键和值。
HashMap 键是唯一的,这意味着不会重复。
HashMap 不保证插入顺序。
单个或多个键与单个值匹配。
一个HashMap例子。
Map<String, Integer> map = new HashMap<>();map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
map.put("key4", 3);
map.put("key5", null); // 空值
map.put(null, 3); // 键为null
2.从HashMap获取所有键– keySet()
map.keySet()返回Set,并且HashMap不保证插入顺序。
Map<String, Integer> map = new HashMap<>();map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
map.put("key4", 3);
map.put("key5", null);
map.put(null, 3);
//Set<String> keys = map.keySet();
// 打印所有键
for (String key : map.keySet()) {
System.out.println(key);
}
输出
终端
key1null
key2
key5
key3
key4
3.从HashMap中的值获取键
要查找映射到某个值的所有键,我们可以循环entrySet()和Objects.equals比较值并获取键。
注意
常见的错误是使用entry.getValue().equals(value)来比较值,因为如果HashMap包含一个null值,则该方法将抛出NullPointerException。
3.1查找所有包含的值的键3。
FindKeysFromMap.java
package com.mkyong.basic;import java.util.*;
public class FindKeysFromMap {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
map.put("key4", 3);
map.put("key5", null);
map.put(null, 3);
for (String key : getKeys(map, 3)) {
System.out.println(key);
}
}
private static Set<String> getKeys(Map<String, Integer> map, Integer value) {
Set<String> result = new HashSet<>();
if (map.containsValue(value)) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (Objects.equals(entry.getValue(), value)) {
result.add(entry.getKey());
}
// 我们不能像这样比较,null会引发异常
/*(if (entry.getValue().equals(value)) {
result.add(entry.getKey());
}*/
}
}
return result;
}
}
输出
终端
nullkey3
key4
3.2查找所有包含的值的键null。
for (String key : getKeys(map, null)) {System.out.println(key);
}
输出
终端
key5
4.从HashMap(Java 8 Stream)中的值获取键
4.1以下是Java 8中的等效示例。
FindKeysFromMapJava8.java
package com.mkyong.basic;import java.util.*;
import java.util.stream.Collectors;
public class FindKeysFromMapJava8 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
map.put("key4", 3);
map.put("key5", null);
map.put(null, 3);
for (String key : getKeysJava8(map, 3)) {
System.out.println(key);
}
}
/*private static Set<String> getKeys(Map<String, Integer> map, Integer value) {
Set<String> result = new HashSet<>();
if (map.containsValue(value)) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (Objects.equals(entry.getValue(), value)) {
result.add(entry.getKey());
}
}
}
return result;
}*/
private static Set<String> getKeysJava8(
Map<String, Integer> map, Integer value) {
return map
.entrySet()
.stream()
.filter(entry -> Objects.equals(entry.getValue(), value))
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
}
}
输出
终端
nullkey3
key4
4.2如果我们只想查找与该值匹配的第一个键。
private static Optional<String> getKeysJava8(Map<String, Integer> map, Integer value) {
return map
.entrySet()
.stream()
.filter(entry -> Objects.equals(entry.getValue(), value))
.map(Map.Entry::getKey)
.findFirst();
}
4.3或者,如果我们想要一个List和Optional。
private static Optional<List<String>> getKeysJava8Optional(Map<String, Integer> map, Integer value) {
List<String> collect = map
.entrySet()
.stream()
.filter(entry -> Objects.equals(entry.getValue(), value))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
return Optional.of(collect);
5. HashMap只有一项
5.1如果HashMap唯一的项只有一个,我们可以使用将转换为,并从数组中获取第一个项,这意味着从中获得第一个键。map.keySet().toArray()SetArray[0]HashMap
Map<String, Integer> map = new HashMap<>();map.put("key1", 1);
Object key = map.keySet().toArray()[0];
System.out.println(key);
输出
key1
5.2我们可以使用map.keySet().toArray()[5]从HashMap中获取第六个键吗?答案是否定的,因为结果将是一个随机键,HashMap不能保证插入顺序。
不要尝试这个
Map<String, Integer> map = new HashMap<>();map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
map.put("key4", 3);
map.put("key5", null);
map.put(null, 3);
Object key = map.keySet().toArray()[5]; // 我们期望从HashMap获得第六个键
System.out.println(key); // 但是结果是随机键
注意:
HashMap不保证插入顺序,这个map.keySet(). toarray()[0]仅适用于HashMap只有一个条目。
以上是 Java –从值HashMap获取键 的全部内容, 来源链接: utcz.com/z/345885.html