Entry<K,V>
키를 알 수없는 경우 반복하지 않고 HashMap에서 하나만 얻는 우아한 방법이 있습니까?
입국 순서는 중요하지 않으므로 다음과 같이 말할 수 있습니다.
hashMapObject.get(zeroth_index);
인덱스 방법에 의한 get이 없다는 것을 알고 있지만.
아래에 언급 된 접근 방식을 시도해도 여전히 hashmap의 모든 항목 세트를 가져와야 합니다.
for(Map.Entry<String, String> entry : MapObj.entrySet()) {
return entry;
}
제안은 환영합니다.
편집 : 요구 사항을 충족시키기 위해 다른 데이터 구조를 제안하십시오.
답변
Jesper의 답변이 좋습니다. 다른 솔루션은 TreeMap을 사용하는 것입니다 (다른 데이터 구조를 요청한 경우).
TreeMap<String, String> myMap = new TreeMap<String, String>();
String first = myMap.firstEntry().getValue();
String firstOther = myMap.get(myMap.firstKey());
TreeMap에는 오버 헤드가 있으므로 HashMap이 더 빠르지 만 대안 솔루션의 예와 같습니다.
답변
지도는 순서가 정해져 있지 않으므로 ‘첫 번째 항목’과 같은 항목이 없으므로 Map
(또는 HashMap
) 에 색인으로 가져 오기 방법이없는 이유도 있습니다 .
당신은 이것을 할 수 있습니다 :
Map<String, String> map = ...; // wherever you get this from
// Get the first entry that the iterator returns
Map.Entry<String, String> entry = map.entrySet().iterator().next();
(참고 : 빈지도 확인 생략).
코드는 맵의 모든 항목을 가져 오지 않으며 발견 된 첫 번째 항목과 함께 즉시 리턴 (루프에서 나옴)합니다.
이 첫 번째 요소의 키와 값을 인쇄하려면
System.out.println("Key: "+entry.getKey()+", Value: "+entry.getValue());
참고 : 전화 iterator()
한다고해서 전체지도를 반복한다는 의미는 아닙니다.
답변
반복자가 가장 간단한 해결책 일 수 있습니다.
return hashMapObject.entrySet().iterator().next();
또 다른 해결책 (예쁘지 않음) :
return new ArrayList(hashMapObject.entrySet()).get(0);
또는 아직 (더 좋지 않음) :
return hashMapObject.entrySet().toArray()[0];
답변
값을 가져 와서 배열로 변환하고 배열의 첫 번째 요소를 가져옵니다.
map.values().toArray()[0]
W.
답변
왜 전화하지 않으려 할 entrySet()
않습니다 그것을 하지 일반적으로 자신의 상황과 완전히 새로운 개체를 만들 수 있지만 대신 외관 객체를 제공합니다. 간단히 말해서 entrySet()
꽤 저렴한 작업입니다.
답변
Java 8을 사용하는 경우 findFirst () 만큼 간단합니다 .
빠른 예 :
Optional<Car> theCarFoundOpt = carMap.values().stream().findFirst();
if(theCarFoundOpt.isPresent()) {
return theCarFoundOpt.get().startEngine();
}
답변
제안한 API를 정말로 원한다면 HashMap을 서브 클래 싱하고 목록에서 키를 추적 할 수 있습니다. 이 점을 실제로 보지는 않지만 원하는 것을 제공합니다. 의도 된 사용 사례를 설명하면 더 나은 솔루션을 얻을 수 있습니다.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SuppressWarnings("unchecked")
public class IndexedMap extends HashMap {
private List<Object> keyIndex;
public IndexedMap() {
keyIndex = new ArrayList<Object>();
}
/**
* Returns the key at the specified position in this Map's keyIndex.
*
* @param index
* index of the element to return
* @return the element at the specified position in this list
* @throws IndexOutOfBoundsException
* if the index is out of range (index < 0 || index >= size())
*/
public Object get(int index) {
return keyIndex.get(index);
}
@Override
public Object put(Object key, Object value) {
addKeyToIndex(key);
return super.put(key, value);
}
@Override
public void putAll(Map source) {
for (Object key : source.keySet()) {
addKeyToIndex(key);
}
super.putAll(source);
}
private void addKeyToIndex(Object key) {
if (!keyIndex.contains(key)) {
keyIndex.add(key);
}
}
@Override
public Object remove(Object key) {
keyIndex.remove(key);
return super.remove(key);
}
}
편집 : 나는 의도적으로 이것의 제네릭 측면을 탐구하지 않았습니다 …