我在Java中有一个Hashmap,如下所示:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
然后我像这样填充它:
team1.put("United", 5);
如何获得钥匙?类似于:team1.getKey()
返回“ United”。
int
应该用于这样的单身。
我在Java中有一个Hashmap,如下所示:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
然后我像这样填充它:
team1.put("United", 5);
如何获得钥匙?类似于:team1.getKey()
返回“ United”。
int
应该用于这样的单身。
Answers:
一个HashMap
包含多个键。您可以keySet()
用来获取所有键的集合。
team1.put("foo", 1);
team1.put("bar", 2);
将存储1
key "foo"
和2
key "bar"
。要遍历所有键:
for ( String key : team1.keySet() ) {
System.out.println( key );
}
将打印"foo"
和"bar"
。
List<String> keys = new ArrayList<>(mLoginMap.keySet());
检查一下。
https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
(使用java.util.Objects.equals
是因为HashMap可以包含null
)
使用JDK8 +
/**
* Find any key matching a value.
*
* @param value The value to be matched. Can be null.
* @return Any key matching the value in the team.
*/
private Optional<String> getKey(Integer value){
return team1
.entrySet()
.stream()
.filter(e -> Objects.equals(e.getValue(), value))
.map(Map.Entry::getKey)
.findAny();
}
/**
* Find all keys matching a value.
*
* @param value The value to be matched. Can be null.
* @return all keys matching the value in the team.
*/
private List<String> getKeys(Integer value){
return team1
.entrySet()
.stream()
.filter(e -> Objects.equals(e.getValue(), value))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
更“通用”且尽可能安全
/**
* Find any key matching the value, in the given map.
*
* @param mapOrNull Any map, null is considered a valid value.
* @param value The value to be searched.
* @param <K> Type of the key.
* @param <T> Type of the value.
* @return An optional containing a key, if found.
*/
public static <K, T> Optional<K> getKey(Map<K, T> mapOrNull, T value) {
return Optional.ofNullable(mapOrNull).flatMap(map -> map.entrySet()
.stream()
.filter(e -> Objects.equals(e.getValue(), value))
.map(Map.Entry::getKey)
.findAny());
}
或者,如果您使用的是JDK7。
private String getKey(Integer value){
for(String key : team1.keySet()){
if(Objects.equals(team1.get(key), value)){
return key; //return the first found
}
}
return null;
}
private List<String> getKeys(Integer value){
List<String> keys = new ArrayList<String>();
for(String key : team1.keySet()){
if(Objects.equals(team1.get(key), value)){
keys.add(key);
}
}
return keys;
}
HashMap
键是唯一的。
您可以Map
使用方法检索所有的键keySet()
。现在,如果你需要的是获得一个关键的考虑到其价值,这是一个完全不同的问题,并Map
不会帮助你那里。您需要一个特殊的数据结构,例如BidiMap
(来自Apache的Commons Collections的映射(允许在键和值之间进行双向查找)的映射)-还应注意,可以将多个不同的键映射到相同的值。
当您想获取United
给定值()的参数()时,5
您也可以考虑使用双向映射(例如,Guava提供的映射:http : //docs.guava-libraries.googlecode.com/git/javadoc/com/google /common/collect/BiMap.html)。
private Map<String, Integer> _map= new HashMap<String, Integer>();
Iterator<Map.Entry<String,Integer>> itr= _map.entrySet().iterator();
//please check
while(itr.hasNext())
{
System.out.println("key of : "+itr.next().getKey()+" value of Map"+itr.next().getValue());
}
next()
在循环中调用两次意味着您将打印奇数键和偶数值。
试试这个简单的程序:
public class HashMapGetKey {
public static void main(String args[]) {
// create hash map
HashMap map = new HashMap();
// populate hash map
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.put(4, "four");
// get keyset value from map
Set keyset=map.keySet();
// check key set values
System.out.println("Key set values are: " + keyset);
}
}
public class MyHashMapKeys {
public static void main(String a[]){
HashMap<String, String> hm = new HashMap<String, String>();
//add key-value pair to hashmap
hm.put("first", "FIRST INSERTED");
hm.put("second", "SECOND INSERTED");
hm.put("third","THIRD INSERTED");
System.out.println(hm);
Set<String> keys = hm.keySet();
for(String key: keys){
System.out.println(key);
}
}
}
为了在HashMap中获取密钥,我们在java.util.Hashmap
包中提供了keySet()方法。例如:
Map<String,String> map = new Hashmap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
// Now to get keys we can use keySet() on map object
Set<String> keys = map.keySet();
现在,按键将在地图中提供所有按键。例如:[key1,key2]
java,util.HashMap
是一个类,而不是一个包,这里没有五年前没有的东西。
我要做的很简单,但浪费内存的是用键映射值,而相反地用值映射键,这使得:
private Map<Object, Object> team1 = new HashMap<Object, Object>();
使用它很重要,<Object, Object>
这样您才能映射keys:Value
并Value:Keys
喜欢
team1.put("United", 5);
team1.put(5, "United");
因此,如果您使用 team1.get("United") = 5
和team1.get(5) = "United"
但是,如果您在对中的一个对象上使用某种特定的方法,那么制作另一个地图会更好:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
private Map<Integer, String> team1Keys = new HashMap<Integer, String>();
然后
team1.put("United", 5);
team1Keys.put(5, "United");
并记住,保持简单;)
获取密钥及其价值
例如
private Map<String, Integer> team1 = new HashMap<String, Integer>();
team1.put("United", 5);
team1.put("Barcelona", 6);
for (String key:team1.keySet()){
System.out.println("Key:" + key +" Value:" + team1.get(key)+" Count:"+Collections.frequency(team1, key));// Get Key and value and count
}
将打印:密钥:联合值:5密钥:巴塞罗那值:6
team1.getKey()
如果:(1)映射为空,或者(2)包含多个键,您期望返回什么?