source

Java의 HashMap에서 키 가져오기

gigabyte 2022. 8. 28. 09:49
반응형

Java의 HashMap에서 키 가져오기

자바에는 다음과 같은 해시맵이 있습니다.

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);

저장하다1열쇠가 있는"foo"그리고.2열쇠가 있는"bar". 모든 키를 반복하려면:

for ( String key : team1.keySet() ) {
    System.out.println( key );
}

인쇄하다"foo"그리고."bar".

이것은 적어도 이론상으로는 가능합니다.지수를 알고 있다면 다음과 같습니다.

System.out.println(team1.keySet().toArray()[0]);

keySet()집합을 반환하므로 집합을 배열로 변환합니다.

물론, 문제는 세트가 당신의 질서를 지키겠다고 약속하지 않는다는 것입니다.HashMap에 항목이 1개만 있는 경우 좋습니다.하지만 그 이상의 항목이 있는 경우 다른 답변과 마찬가지로 맵을 루프하는 것이 좋습니다.

이것 좀 봐.

https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

(사용)java.util.Objects.equalsHashMap은 다음을 포함할 수 있습니다.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> findKey(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> findKeys(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> findKey(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 findKey(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> findKeys(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;
}

모든 것을 취득할 수 있습니다.Map여기서 필요이 키를 취득하는 것이라면, 그것은 전혀 다른 문제이며,MapApache Commons Collections의 (키와 값 사이의 쌍방향 검색을 가능하게 하는 맵)과 같은 특수한 데이터 구조가 필요합니다.또, 복수의 다른 키를 같은 값에 매핑 할 수도 있습니다.

기능 연산을 사용하여 반복 시간을 단축합니다.

team1.keySet().forEach((key) -> {
      System.out.println(key);
});

말다툼을 하고 싶으시다면(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());
                }

Foreach도 사용할 수 있습니다.

team1.forEach((key, value) -> System.out.println(key));

단순하고 좀 더 검증이 필요한 경우.

public String getKey(String key)
{
    if(map.containsKey(key)
    {
        return key;
    }
    return null;
}

그러면 임의의 키를 검색할 수 있습니다.

System.out.println( "Does this key exist? : " + getKey("United") );

HashMap에서 키를 가져오려면 keySet() 메서드가 있습니다.java.util.Hashmap패키지.ex:

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]

해결 방법은 키 위치를 알고 있는 경우 키를 String 배열로 변환하고 해당 위치의 값을 반환하는 것입니다.

public String getKey(int pos, Map map) {
    String[] keys = (String[]) map.keySet().toArray(new String[0]);

    return keys[pos];
}

이 간단한 프로그램을 사용해 보십시오.

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);
        }
    }
}

매우 심플하지만 메모리 낭비를 초래하는 작업은 값을 키로 매핑하고 키를 다음과 같은 값으로 매핑하는 것입니다.

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

언급URL : https://stackoverflow.com/questions/10462819/get-keys-from-hashmap-in-java

반응형