위치별로 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;
}