我有这样的在Java中一个HashMap:获取密钥在Java中
private Map<String, Integer> team1 = new HashMap<String, Integer>();
然后我填满它是这样的:
team1.put("United", 5);
我怎样才能拿到钥匙?例如:team1.getKey()
返回“United”。
我有这样的在Java中一个HashMap:获取密钥在Java中
private Map<String, Integer> team1 = new HashMap<String, Integer>();
然后我填满它是这样的:
team1.put("United", 5);
我怎样才能拿到钥匙?例如:team1.getKey()
返回“United”。
A HashMap
包含多个键。您可以使用keySet()
来获取所有密钥的集合。
team1.put("foo", 1);
team1.put("bar", 2);
将与关键"foo"
和2
存储1
与关键"bar"
。遍历所有的键:
for (String key : team1.keySet()) {
System.out.println(key);
}
将打印"foo"
和"bar"
。
您可以使用方法keySet()
检索所有Map
的密钥。现在,如果你需要的是获得密钥给定其值,这是一个完全不同的问题和Map
不会帮助你在那里;你需要一个专门的数据结构,例如BidiMap
(一个允许在key的值和值之间进行双向查找的映射),从Apache的Commons Collections也可以知道,几个不同的键可以映射到相同的值。
选中此项。
http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
假设你有每个键不同的值,你可以做这样的事情:
private String getKey(Integer value){
for(String key : team1.keySet()){
if(team1.get(key).equals(value)){
return key; //return the first found
}
}
return null;
}
或者,如果你不能假设每个按键都有一个differente值:
private List<String> getKeys(Integer value){
List<String> keys = new ArrayList<String>();
for(String key : team1.keySet()){
if(team1.get(key).equals(value)){
keys.add(key);
}
}
return keys;
}
或者使用JDK8
private Optional<String> getKey(Integer value){
return team1
.entrySet()
.stream()
.filter(e -> e.getValue().equals(value))
.map(e -> e.getKey())
.findFirst();
}
private List<String> getKeys(Integer value){
return team1
.entrySet()
.stream()
.filter(e -> e.getValue().equals(value))
.map(e -> e.getKey())
.collect(Collectors.toList());
}
但是如果几个键映射到相同的值会发生什么?您应该返回一个密钥列表 –
正如您想获得给定值(5
)的参数(United
),您也可以考虑使用双向映射(例如,由Guava提供:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/BiMap.html)。
如果你只是需要一些简单和更多的验证。
public String getKey(String key)
{
if(map.containsKey(key)
{
return key;
}
return null;
}
然后您可以搜索任何键。
System.out.println("Does this key exist? : " + getKey("United"));
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());
}
试试这个简单的程序:
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);
}
}
}
仅复制现有的答案。 -1 –
这是可行的,至少在理论上,如果知道索引:
System.out.println(team1.keySet().toArray()[0]);
keySet()
返回一个列表,所以你转换列表到数组。
问题当然是,一套不承诺保持您的订单。如果你在HashMap中只有一个项目,那么你很好,但如果你有更多的东西,最好是在地图上循环,就像其他答案一样。
帮助我也:) – sTg
我要做的,这是非常简单的,但浪费内存的值一键映射并做oposite与价值使这个按键映射:
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
地图包含几个键。这是一本字典。你的问题没有意义。 –
如果:(1)地图是空的,或者(2)它包含多个键,你期望'team1.getKey()'返回什么? – NPE
'int'应该用于这样的单个元素。 –