2012년 11월 13일 화요일

자바의 트리맵(TreeMap)


요소들을 차례대로 정렬하는 기능을 제외하면 해쉬맵(HashMap)과 거의 같은 트리맵(TreeMap)에 대해서 공부하는 시간을 갖기로 하겠다. 이미 트리셋을 공부하였으니 트리맵도 이름처럼 정렬을 가미한 클래스라는 것을 알수 있을 것이다.^^


자바 컬렉션 프레임워크의 멤버인 트리맵도 해쉬맵처럼 비동기화(not synchronized)되어 있고 Collections.synchronizedSortedMap 메소드를 이용해 wrapped해서
SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));
위의 구문을 이용해 동기화시키는 것이 가능하며 키(Key)값을 중심으로 밸류(value)값을 가지고 있고 NavigableMap 인터페이스와 SortedMap 인터페이스, 그리고 AbstractMap 클래스를 기본으로 계승하고 있다. 키값은 중복될수 없으며 밸류값은 여러개의 중복된 값을 가지는 것이 가능하다.^^


해쉬테이블과 해쉬맵까지 거쳐온 여러분들은 모두 알고있는 내용일테지만 워밍업(?) 차원에서 잠시 읊어보았다.ㅎㅎ 이제 필자의 예제를 보면서 트리맵에 대해서 살펴보기로 하겠다. 저번 강의를 들은 여러분은 아마 이런 생각을 하고 있을 것이다. 저번 예제 그냥 순서대로 정렬하는거 맞죠? 그래 맞당.ㅎㅎ 여러분이 다 이와같이 눈에 뻔한 예제에 식상할 것을 대비해 필자가 대규모 반전(?) 예제를 들고 나왔다. 간만에 대한민국 걸그룹들이 총출동하는 예제이니 눈에 쌍심지(?)를 켜고 들여다보면 얻는바가 클것이라 생각한다.^^


=== 강이의 JAVA강좌 ===
2ne1=YG
소녀시대=SM
시크릿=TS
원더걸스=JYP
카라=DSP
=== 강이의 자바강좌 ===
{카라=DSP, 원더걸스=JYP, 시크릿=TS, 소녀시대=SM, 2ne1=YG}
{소녀시대=SM, 시크릿=TS}

예제는 크게 두 파트로 나눴다. 기본적으로 트리맵을 이용해서 요소들을 돌리는 것이 첫번째 파트이고 두번째 파트는 응용편으로 한번 넣어보았다. 그럼 이제 예제로 들어가보자. 트리맵을 써야하니 처음에 불러들인 것이고 요소들을 트리맵에 넣어야하는데 요소갯수만큼의 put( ) 메소드들을 이용한 요소삽입은 해보았으니 이번엔 일반 배열을 통한 for 구문을 이용해 요소들을 트리맵에 위와같이 넣어보았다. 이렇게 하는거 궁금했었는데 필자가 보여준거라면 우린 통한거다.ㅎㅎ 여기까지가 첫번째 파트인데 잘 찍힌다. 그런데 여기서 중요한건 자알 찍히는 정도가 아니라 순서까지 맞춰서 찍혔다는 것이다. 트리맵이니깐......

다음은 descendingMap( ) 메소드를 이용해서 tm 트리맵을 역순으로 정렬하는 구문이다. 이런건 메소드의 이름만 봐도 바로 알수 있어야한다.ㅎㅎ 그리고 마지막은 subMap( ) 메소드인데 트리맵에서 이게 하이라이트(?)일지도 모르겠다. 조금 어려워보이는 걸로 따지면 말이다.ㅎㅎ 알고나면 별거없으니 모르는 이들은 잠시 귀를 기울이기 바란다.^^

subMap( ) 메소드가 하는 일은 sub에서 느끼다시피 뭔가 일을 부분적으로 하는 것이다. 여기서는 해당 맵 요소들의 범위를 정해주면 그 해당 범위내의 정렬된 요소들 중에서 일부분을 부분적으로 돌려준다. 예제에서는 '소녀시대'와 '원더걸스'를 입력해서 소녀시대부터 원더걸스까지, 즉 '소녀시대', '시크릿', '원더걸스'를 돌려준다. 그런데 결과는 원더걸스가 빠져있다. 왜일까? 힘쎈 원더걸스(?)라서 사라진건가? ㅎㅎ 범위를 정해줄때의 시작요소가 '소녀시대'이고 끝요소가 '원더걸스'인데 시작요소와 끝요소의 옆을 보면 true와 false가 적혀있을 것이다. true일때는 지정요소를 포함하는 것이고 false일때는 지정요소를 포함하지 않는다. 따라서 소녀시대 옆에는 true라서 시작요소를 포함한 것이고 끝요소인 원더걸스 옆에는 false라 결과에서 누락된 것이다. subMap( ) 메소드의 기능을 알아놓으면 프로그램을 짤때 도움이 될것이다.^^

이것으로 트리맵에 대해서 짧게나마 알아보는 시간을 가져보았다. 본 예제를 중심으로 응용하면서 다른 메소드들을 공부하면 전체적으로 무난할 것이라 생각한다. 다른 기능들은 대부분 여러분이 벌써 필자와 함께 훈련(?)한 부분들이거나 눈치코치(?)로도 다 이해가능한 수준일 것이기에 이 정도에서 오늘 트리맵 강의는 편안하게 접도록 하겠다.^^

댓글 3개:

  1. Hiya! I know this is kinda off topic however , I'd figured I'd
    ask. Would you be interested in exchanging links or maybe guest writing a blog post or vice-versa?
    My site discusses a lot of the same subjects as yours and I believe
    we could greatly benefit from each other. If you might be interested
    feel free to send me an email. I look forward to hearing from you!
    Superb blog by the way!

    Feel free to visit my homepage; garcinia cambogia

    답글삭제
  2. Enjoy Your Water, Enjoy Your Life. We offering all kinds of bathroom sink taps and kitchen taps for you. Check our online store and find your best tap here: www.cheaptap.co.uk

    답글삭제
  3. 도움이 되었습니다! 고마워요!!

    답글삭제