2012-03-08 1 views
1

db에서 돌아 오는 LinkedHashMap이 있습니다. 이지도에서 정확히 마지막 요소 (키)를 가져와야합니다. keySet 메서드를 사용하여 모든 키를 얻으면 키 집합을 반환하지만 Set은 순서를 보장하지 않습니다. 내가 db에서 반환 된 연결된 hashmap에서 정확히 마지막 키를 가져 가야합니다. 내가 어떻게 할 수 있니?링크 된 해시 맵에서 마지막 요소를 가져 오는 것이 DAO 계층에서 반환 되었습니까?

아래 코드는 데이터베이스에서 데이터를 가져 오는 방법입니다.

LinkedHashMap<String,String> map = someDao.getMap(String input); 

이지도에서 나는 마지막 요소를 취해야합니다.

감사합니다.

+1

순서의 마지막 요소? 어휘? – Tudor

+0

당신이 말했듯이, 세트에는 순서가 없습니다 (따라서 이름). 주문이 없다면 * last *를 어떻게 정의합니까? 가장 높은'hashCode()'값을 가진 것? 아니면지도에 넣은 것입니까? 아니면 * 가장 깊은 상자에있는 것입니까? – rlegendi

+0

안녕하세요 rlegendi, 답장을 보내 주셔서 감사합니다. 나는 가장 깊은 상자 안에있는 것을 필요로한다. – user1016403

답변

6

keySet()이 실행되는 경우 LinkedHashMapLinkedHashSet을 반환하지만 실제로는 Set이지만 요소의 순서를 "기억"합니다.

당신은 다음과 같은 마지막 요소를 얻을 수 있습니다 : 다른 포스트에서

Map<TheType> map = ..... 
................. 
TheType theLastKey = new ArrayList<>(map.keySet()).get(map.size() - 1) 
+4

iterable의 마지막 가치를 얻는 더 나은 방법 - * 가지지 않는 * 방법 O (n) 공간. Guava의 Iterables.getLast를 참조하십시오. –

+0

좋은 지적, @ 존 스킬. 하지만 그 문제가없는'ArrayList'를 사용하여 포장했습니다. – AlexR

+2

당신이 준 코드는 컴파일조차되지 않지만 새로운 ArrayList (map.getKeys())이면 그 문제를 나타낼 것입니다 - 왜냐하면 그 생성자는 모든 요소를 ​​복사하기 때문입니다. –

0

대답이 답변 나를 도왔다. Pls는 원래 게시물에 Java HashMap: How to get a key and value by index?을 참조합니다. -1 끝에, 당신이는 ArrayIndexOutOfBoundsException를 얻을 것없이 : 내가 키 집합

toArray()[(keyset().size)-1] 

노트의 크기에 0

toArray()[0] - (where 0 represents the first item in the keyset) 

교체 한

Object myKey = myHashMap.keySet().toArray()[0]; 

.

관련 문제