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.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> 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
여기서 필요한 것이 키를 취득하는 것이라면, 그것은 전혀 다른 문제이며,Map
Apache 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
'source' 카테고리의 다른 글
objective-c typedef를 해당하는 문자열로 변환합니다. (0) | 2022.08.29 |
---|---|
Quasar 프레임워크 데이터 테이블에서 선택한 행 ID 가져오기 (0) | 2022.08.28 |
VueJ 루트에서 완전한 URL(원점 포함)을 얻을 수 있습니까? (0) | 2022.08.28 |
@RequestBody and @ResponseBody annotations in Spring (0) | 2022.08.28 |
vuejs 재귀적 단일 파일 구성 요소 (0) | 2022.08.28 |