2013-03-02 4 views
0

HashMap의 첫 번째 요소와 두 번째 요소를 별도로 액세스 할 수 있습니까? 내가HashMap의 요소에 액세스

Map<Integer, Integer> testMap = new HashMap<Integer, Integer>(); 
int f = testMap.first(); 

내가 그런 기능이 없다는 것을 알고는 HashMap이있는 경우 는 내 말은,하지만 어떻게 그 요소에 액세스 할 수 있습니까?

답변

2

HashMap은 순서를 유지하지 않습니다.

이 클래스는지도의 순서를 보장하지 않습니다. 특히 에서 주문이 일정하게 유지 될 것이라고 보장하지 않습니다.

Reference

당신은 삽입 순서 또는 TreeMap을 유지 LinkedHashMap를 사용할 수 있습니다.

LinkedHashMap

이 구현은, 그것의 모든 항목을 통해 실행하는 이중의 링크리스트를 보관 유지한다고 HashMap의 차이가

. 이 연결된 목록은 일반적으로 의 키가지도 (삽입 주문)에 삽입 된 순서 인 반복 순서를 정의합니다. 키가지도에 다시 삽입되는 경우 삽입 순서는 영향을받지 않습니다. 은 (A 키 (K)는지도 m 재 삽입되면 m.put ( m.containsKey (k)는 직전 호출에 true를 반환 할 때, K는, V)가 호출된다.)

TreeMap

맵은 키의 자연 순서에 따라 정렬되거나 사용되는 생성자에 따라 맵 작성시 제공되는 Comparator에 따라 정렬됩니다.

+0

Map 항목의 첫 번째 요소를 가져 오는 것이므로 testMap.put (1, 2); 그 1과 2를 따로 따로 액세스하여 다른 요소와 비교하거나 1 또는 2로 다른 것을 할 수 있습니까? – user2081119

+0

@ user2081119 키와 연관된 값을 반환하는'Map # get (key)'에 의해 map으로부터 값을 검색 할 수 있습니다. 없는. –

+0

오, 그게 다야! 고마워 .1 – user2081119

0

지도가 정렬되지 않았으므로 '첫 번째 항목'과 같은 것이 없으므로 Map (또는 HashMap)에 대한 get-by-index 메서드가없는 이유이기도합니다.

당신은이 작업을 수행 할 수 있습니다 :

Map<Integer, Integer> map = ...; // wherever you get this from 

// Get the first entry that the iterator returns 
Map.Entry<Integer, Integer> entry = map.entrySet().iterator().next(); 
(Note: Checking for an empty map omitted). 

귀하의 코드는지도에있는 모든 항목을하지 않고 즉시 반환 (및 휴식 루프 만점) 찾았다 첫 번째 항목으로.

참고 : iterator()을 호출한다고해서 전체지도를 반복하는 것은 아닙니다.

0

no. 당신은 HapMap/HashTable이 키와 값을 함께 가지고있는 엔트리 (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Map.Entry.html)에 데이터를 저장할 수 없습니다.

항상 entrySet()의 Iterator를 가져 와서 항목에 액세스 할 수 있습니다. 또는 키 집합 만 반환하는 keySet()을 얻으려고합니다.

희망이 도움이됩니다.

0

firstKeylastKey과 같은 방법이있는 LinkedHashMap을 사용할 수 있습니다.그러나 2 차 키 당신은 반복해야하고 HashMap이 추가 된 순서 요소를 기억하지 않기 때문에, "첫 번째 요소는 '하지 않는 당신은 키가지도

0
HashMap <Integer, Integer> testMap = new HashMap <Integer, Integer>(); 
testMap.put (1, 2); 
testMap.put (2, 3); 
Iterator <Integer> i = testMap.values().iterator(); 
System.out.println ("First element: " + i.next()); 
System.out.println ("Second element: " + i.next()); 

주에 입력 된 순서대로 요소를 얻을 필요한 의미는 "처음 추가됨"입니다.

0
Iterator it = testMap.entrySet().iterator(); 

        while (it.hasNext()) { 
          Map.Entry pairs = (Map.Entry) it.next(); 
          System.out.println("Key"+pairse.getKey()); 
          System.out.println("Value"+pairs.getValue()); 
}