해시맵에서1개의 엔트리를 반복하지 않고 취득하는 방법
밖에 없는 ?Entry<K,V>
키를 알 수 없는 경우 반복하지 않고 해시맵에서 가져옵니다.
입국 순서는 중요하지 않기 때문에, 다음과 같은 말을 해도 될까요?
hashMapObject.get(zeroth_index);
나는 그러한 인덱스 방식의 get by index method가 존재하지 않는다는 것을 알고 있다.
아래 어프로치를 시도해도 해시맵의 엔트리 세트를 모두 취득할 필요가 있습니다.
for(Map.Entry<String, String> entry : MapObj.entrySet()) {
return entry;
}
제안해주시면 감사하겠습니다.
편집: 기타 필요한 데이터 구조를 제안해 주십시오.
는 순서가 않기 에 '첫 번째 항목것이 , '첫 번째 항목'이라는 것도 .색인으로 취득하다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()
맵 전체에서 반복하고 있는 것은 아닙니다.
Jesper의 대답은 좋다.다른 솔루션은 TreeMap을 사용하는 것입니다(다른 데이터 구조를 요청했습니다).
TreeMap<String, String> myMap = new TreeMap<String, String>();
String first = myMap.firstEntry().getValue();
String firstOther = myMap.get(myMap.firstKey());
TreeMap에는 오버헤드가 있으므로 HashMap이 더 빠르지만 대체 솔루션의 예로서 사용할 수 있습니다.
나는 반복기가 가장 간단한 해결책이라고 생각한다.
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을 사용하는 경우 find First()와 같이 간단합니다.
간단한 예:
Optional<Car> theCarFoundOpt = carMap.values().stream().findFirst();
if(theCarFoundOpt.isPresent()) {
return theCarFoundOpt.get().startEngine();
}
제안하신 API가 필요한 경우 해시맵을 서브클래스로 분류하여 예를 들어 리스트 내의 키를 추적할 수 있습니다.요점은 모르겠지만 원하는 걸 얻을 수 있어의도한 사용 사례에 대해 설명해 주시면 더 나은 해결책을 찾을 수 있을 것입니다.
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);
}
}
편집: 나는 고의로 이 범용적인 측면을 파고들지 않았다.
'반복하지 않는다'는 게 무슨 뜻이죠?
하시면 됩니다.map.entrySet().iterator().next()
지도에서 반복하지 않습니다(각 사물을 반복한다는 의미).락이 는 연락이 안 Entry<K, V>
반복기를 사용하지 않고요.지도의 자바독입니다.엔트리는 다음과 같이 기재되어 있습니다.
Map.entrySet 메서드는 요소가 이 클래스의 맵 컬렉션 뷰를 반환합니다.맵 엔트리에 대한 참조를 취득하는 유일한 방법은 이 컬렉션뷰의 리터레이터입니다.이 지도들.엔트리 오브젝트는 반복 기간 동안만 유효합니다.
달성하려는 것이 무엇인지 좀 더 자세히 설명해 주시겠습니까?특정 기준(예를 들어 "특정 키가 있다")과 일치하는 개체를 먼저 처리하고 그렇지 않으면 나머지 개체로 폴백하려면 우선 순위를 확인합니다.큐. 자연순서 또는 사용자 정의 순서에 따라 오브젝트를 정렬합니다.Comparator
공해해제
import java.util.*;
public class Friday {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("code", 10);
map.put("to", 11);
map.put("joy", 12);
if (! map.isEmpty()) {
Map.Entry<String, Integer> entry = map.entrySet().iterator().next();
System.out.println(entry);
}
}
}
HashMap을 사용했기 때문에 이 방법은 작동하지 않습니다.이 경우 Linked Hash Map을 사용하는 것이 올바른 솔루션이 될 것입니다.
이 경우 지도에서 단일 항목을 얻을 수 있으며, '최초'가 실제로 적용되지 않는 경우 가능한 한 근접하게 입력할 수 있습니다.
import java.util.*;
public class Friday {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("code", 10);
map.put("to", 11);
map.put("joy", 12);
if (! map.isEmpty()) {
Map.Entry<String, Integer> entry = map.entrySet().iterator().next();
System.out.println(entry);
}
}
}
…을 하다 나서 는 그 ★★★★★★★★★★★★★★★★★★★★★★★★.Iterables
과바 도서관에서 수업을 듣습니다.
번째 : "첫 번째" 요소를 가져오려면:Iterables.getFirst( someMap.values(), null );
으로는 같은 .Map.values().iterator().next()
맵에 아무것도 없는 경우 기본값(이 경우는 늘)을 지정할 수도 있습니다.
Iterables.getLast( someMap.values(), null );
맵의 마지막 요소를 반환합니다.
Iterables.get( someMap.values(), 7, null );
는 맵의 7번째 요소를 반환합니다(존재하는 경우).그렇지 않은 경우 기본값(이 경우 null)을 반환합니다.
단, HashMap은 순서가 매겨져 있지 않습니다.그러니 처음 던진 물건을 돌려줄 생각은 하지 마와 마찬가지로 맵된 값을 얻는 데 유용할 수 있습니다.
그것만으로 Guava 라이브러리를 추가할 필요는 없을지도 모르지만, 만약 당신이 그 라이브러리에서 다른 멋진 유틸리티를 사용하고 있다면...
당신의 편집에 따라, 제가 제안하는 것은 다음과 같습니다.
엔트리가 1개뿐인 경우 Map을 이중 객체로 대체할 수 있습니다.유형 및 기본 설정에 따라 다음 작업을 수행합니다.
- 배열(키와 값의 2가지 값)
- 두 가지 성질을 가진 단순한 물체
Java 8 이후 버전을 사용하는 경우 다음을 사용할 수 있습니다.
return hashMapObject.entrySet().stream().findFirst().orElse(null) // return null if the map is empty
map<string,string>m;
auto it=m.begin();//get iterator to the first element of map(m)
return m->first;//return first string(1st string in map<string,string>m)
//Incase you want the second string
//you can use return m->second(2st string in map<string,string>m)
//if you want to iterate the whole map you can use loop
for(auto it:m)//m is a map
cout<<it->first<<endl;
해시 맵의 첫 번째 요소를 얻으려면 코틀린에서 벨로우 코드를 사용할 수 있습니다.
val data : Float = hashMap?.get(hashMap?.keys?.first())
나는 답을 얻었다.(간단하다)
Array List를 가져와서 캐스팅하고 배열 목록의 크기를 찾습니다.여기 있습니다.
ArrayList count = new ArrayList();
count=(ArrayList) maptabcolname.get("k1"); //here "k1" is Key
System.out.println("number of elements="+count.size());
사이즈가 표시됩니다.(제안해주세요)그건 효과가 있다.
언급URL : https://stackoverflow.com/questions/1509391/how-to-get-the-one-entry-from-hashmap-without-iterating
'source' 카테고리의 다른 글
mysql 테이블 생성 쿼리에서 행 크기가 너무 큽니다. (0) | 2022.09.08 |
---|---|
ES6의 "export const"와 "export default"의 비교 (0) | 2022.09.08 |
페이지 로드 후 JavaScript를 실행하는 방법 (0) | 2022.09.08 |
Javascript에서 문자열로 사용되는 변수 이름 (0) | 2022.09.08 |
like 절 JPQL의 매개 변수 (0) | 2022.09.08 |