私はこのようにJavaでハッシュマップを持っています:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
次に、次のように入力します。
team1.put("United", 5);
どうすればキーを入手できますか?のようなもの:team1.getKey()
「ユナイテッド」を返す。
int
このような単一のものに使用する必要があります。
私はこのようにJavaでハッシュマップを持っています:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
次に、次のように入力します。
team1.put("United", 5);
どうすればキーを入手できますか?のようなもの:team1.getKey()
「ユナイテッド」を返す。
int
このような単一のものに使用する必要があります。
回答:
AにHashMap
は複数のキーが含まれています。を使用keySet()
して、すべてのキーのセットを取得できます。
team1.put("foo", 1);
team1.put("bar", 2);
1
キー"foo"
とキーで保存され2
ます"bar"
。すべてのキーを反復するには:
for ( String key : team1.keySet() ) {
System.out.println( key );
}
印刷"foo"
し"bar"
ます。
List<String> keys = new ArrayList<>(mLoginMap.keySet());
インデックスを知っていれば、これは少なくとも理論的には実行可能です。
System.out.println(team1.keySet().toArray()[0]);
keySet()
セットを返すため、セットを配列に変換します。
もちろん問題は、セットが注文を維持することを約束しないことです。HashMapに項目が1つしかない場合は問題ありませんが、それ以上の場合は、他の回答と同様に、マップをループ処理することをお勧めします。
HashMap
。良いショー。
これをチェックして。
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 Collectionの(キーと値の間の双方向ルックアップを可能にするマップ)のような特殊なデータ構造が必要です-また、いくつかの異なるキーが同じ値にマップされる可能性があることに注意してください。
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()
ループで2回呼び出すと、奇数番号のキーと偶数番号の値が出力されます。
次の簡単なプログラムを試してください:
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
パッケージではなくクラスであり、5年前にはここになかったものはここにはありません。
非常に単純ですがメモリを浪費するのは、キーを使用して値をマップし、反対の方法で値をキーにマップして、次のようにします。
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"
しかし、ペアのオブジェクトの1つで特定のメソッドを使用する場合は、別のマップを作成した方がよいでしょう。
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
}
印刷されます:キー:United Value:5キー:Barcelona Value:6
team1.getKey()
(1)マップが空である、または(2)マップに複数のキーが含まれている場合、何を返すと思いますか?