[java] 위치로 HashMap에서 요소를 가져올 수 있습니까?

위치별로 HashMap에서 요소를 검색하는 방법은 무엇입니까?



답변

HashMaps 는 순서를 유지하지 않습니다.

이 클래스는지도의 순서를 보장하지 않습니다. 특히 주문이 시간이 지나도 일정하게 유지된다는 보장은 없습니다.

예측 가능한 반복 순서를 보장하는 LinkedHashMap을 살펴보십시오 .


답변

LinkedHashMap을 사용하고 위치별로 검색해야하는 경우 값을 ArrayList로 변환합니다.

LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap<String,String>();
/* Populate */
linkedHashMap.put("key0","value0");
linkedHashMap.put("key1","value1");
linkedHashMap.put("key2","value2");
/* Get by position */
int pos = 1;
String value = (new ArrayList<String>(linkedHashMap.values())).get(pos);


답변

당신은 당신이지도 사용에 요소를 추가하는 순서 유지하려면 LinkedHashMap단지 반대를 HashMap.

다음은 맵의 인덱스로 값을 가져올 수있는 접근 방식입니다.

public Object getElementByIndex(LinkedHashMap map,int index){
    return map.get( (map.keySet().toArray())[ index ] );
}


답변

어떤 이유로 hashMap을 고수해야하는 경우 keySet을 배열로 변환하고 배열의 키를 인덱싱하여 다음과 같이 맵에서 값을 가져올 수 있습니다.

Object[] keys = map.keySet().toArray();

그런 다음 다음과 같이지도에 액세스 할 수 있습니다.

map.get(keys[i]);


답변

사용 LinkedHashMap:

예측 가능한 반복 순서와 함께 Map 인터페이스의 해시 테이블 및 연결 목록 구현. 이 구현은 모든 항목을 통해 실행되는 이중 링크 목록을 유지한다는 점에서 HashMap과 다릅니다.


답변

LinkedHashMap을 사용하고이 함수를 사용하십시오.

private LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();

이렇게 정의하고.

private Entry getEntry(int id){
        Iterator iterator = map.entrySet().iterator();
        int n = 0;
        while(iterator.hasNext()){
            Entry entry = (Entry) iterator.next();
            if(n == id){
                return entry;
            }
            n ++;
        }
        return null;
    }

이 함수는 선택한 항목을 반환 할 수 있습니다.


답변

나는 ‘위치’로 HashMap에 요소를 삽입 한 순서를 참조한다고 가정하고 있습니다. 이 경우 LinkedHashMap을 사용하고 싶습니다. LinkedHashMap은 접근 자 메소드를 제공하지 않습니다. 다음과 같이 작성해야합니다.

public Object getElementAt(LinkedHashMap map, int index) {
    for (Map.Entry entry : map.entrySet()) {
        if (index-- == 0) {
            return entry.value();
        }
    }
    return null;
}