source

해시맵에서1개의 엔트리를 반복하지 않고 취득하는 방법

factcode 2022. 9. 8. 21:49
반응형

해시맵에서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

반응형