[JAVA] Map-HashMap, TreeMap

MapMap 인터페이스를 구현하는 클래스 인스턴스는 Key와 Value가 짝을 이루는 형태로 데이터를 저장합니다.학교를 예로 들면 1학년 3반에 30명의 학생이 있을 때 보통 30명의 학생이출석 번호, 키 시퀀스 번호 등 각자 개인 번호를 가지고 있습니다.이러한 번호는 Key와 같고 이에 대응하는 학생의 이름이 Value라고 생각합니다.”1학년 3반에 2번의”로 번호를 통해 학생을 호출하듯이 Map 인터페이스에서도 Key 값을 통해 Value 값을 매겨옵니다.여기서 key와 Value 각각의 특징은 Key는 중복이 되어서는 안 되고 Value는 중복이 될 수 있습니다.예시에서 들었던 번호와 학생의 이름을 생각해 보면 당연히 번호는 중복되지 않지만, 같은 반에 이름이 같은 학생이 있을 수 있기 때문에 이름은 중복될 것입니다. 만약 이름이 같다고 해도 번호로 두 학생을 구분할 수 있기 때문입니다.그리고 이렇게 Key와 Value 쌍을 Entry라고 표현을 합니다.

Map 인터페이스의 주요 메서드입니다.메서드 내의 용 put(K,V v) Key와 Value 값 추가 KeySet() Key들만 모여 있는 Set를 리턴 values() Value들만 모여 있는 Collection을 리턴 entrySet() Key, Value가 있는 Entry들이 모여 있는 Set 리턴 renove(Object k) 주어진 Key와 일치하는 Map의 Entry 값 삭제 후 리턴 get(Kk) 주어진 Key와 일치하는 Map의 Value 값 리턴에서는 Map 인터페이스를 구현하고 있는 대표적인 클래스의 HashMap과 Tree

HashMapHashMap은 Map 인터페이스를 구현하기 위해 Map의 성질을 그대로 가지고 있습니다.Map이 Key와 Value를 가지고 있다고 했는데 여기서 Key와 Value는 모두 객체입니다.

예제를 통해서 사용법을 알아볼게요.

아까 List와 Set 사용법과 거의 비슷하기 때문에 그렇게 어려운 점은 없을 것입니다.먼저 HashMap을 작성하고 4쌍의 데이터를 저장했습니다.Map은 Key 값을 통해 Value를 취득하기 때문에 데이터를 저장할 때 순서 없이 저장됩니다.따라서 위의 예에서도 저장된 순서에 관계없이 출력되었음을 확인할 수 있습니다.데이터 삭제는 remove() 방법으로 파라미터로 Key 값을 전송하면 그에 맞는 entry가 삭제됩니다.size() 메서드는 현재 저장되어 있는 entry의 개수를 출력해 줍니다.get() 메서드에 Key 값을 파라미터로 전송하면 그에 맞는 Value 값을 반환합니다.

이상 기본적인 HashMap 사용법을 살펴보았습니다.

이번에는 HashMap에서 데이터를 가져오는 가장 중요한 방법에 대해 알아보겠습니다.KeySet(), value(), entrySet()의 3종류가 있습니다.이전 컬렉션 프레임워크에서 Set과 List는 Collection 인터페이스를 상속받았고 Map은 그렇지 않다고 말한 적이 있습니다. 그리고 Collection은 Interator 인터페이스를 상속한다고도 말했습니다.따라서 Set과 List를 구현하는 클래스는 Interator(반복자)를 사용할 수 있었습니다.그러나 Map을 구현하는 클래스는 Interator 인터페이스를 구현하지 않으므로 반복적으로 사용할 수 없습니다.그래서 이번에는 위의 세 가지 메소드를 사용해서 반복적으로 HashMap의 Key, Value 값을 출력하는 방법에 대해 알아보겠습니다.컬렉션 프레임워크의 많은 데이터를 쉽고 효과적으로 관리할 수 있는 표준화된 방법을 제공하는 클래스 및…blog.naver.comKeySet()Map에서 Key만 세트 유형으로 모두 수신되는 메서드입니다.즉, 1, 2, 3 데이터만 Set로 리턴하는 메서드입니다.

values()Map에서 Value만 Collection 유형으로 모두 받는 메서드입니다.즉, ‘철수’, ‘영희’, ‘민수’ 데이터만 Collection으로 리턴하는 방법입니다.

entrySet()Map에서 Key와 Value 값이 모두 저장되어 있는 Entry 유형을 가지고 있는 Set을 받는 메서드입니다.즉, 첫 번째 entry에는 1 = 철수, 두 번째는 2 = 연희와 짝을 지어 entry에 저장되고 이 entry가 set 안에 저장되어 있는 상태로 리턴됩니다.즉, 위의 예에서는 set 안에 entry가 3가지가 있습니다.

다음은 그림으로 알기 쉽게 나타내고 있습니다.

Key 값만 가지고 있는 set를 리턴 value 값만 가지고 있는 Collection을 리턴 Key, Value 쌍을 가지고 있는 entry를 가지고 있는 set를 리턴

Set와 Collection은 반복자를 사용할 수 있기 때문에 위와 같이 데이터를 Map에서 Set와 Collection으로 리턴하는 것입니다.

그럼 예를 통해서 반복자를 활용하여 값을 순차적으로 출력해 보도록 하겠습니다.EntrySet의 경우 Set 안에 Entry 타입의 오브젝트가 존재하기 때문에 Set <> 제네릭 안에 타입이 Entry가 되는 것입니다.따라서 dict에서 set을 받아서 entryset에 저장하고 그 entryset에서 반복자를 받아들이면 Entry를 하나씩 가리키는 반복자가 만들어집니다.그래서 entryiter.hasnext()를 통해서 entry를 하나씩 가리키고 Key와 Value 값을 순차적으로 돌려주는 거죠.그러면 아래와 같이 출력되는 것을 확인할 수 있습니다.

TreeMapTreeMap은HashMap의차이는아까공부했던TreeSet과HashSet의차이와똑같습니다.TreeMap은트리자료구조를바탕으로실현되어있으며정렬상태를유지한다.이게두사람의차이입니다. 따라서 사용법은 동일하지만 실행 시 약간의 차이가 발생합니다.

우선 HashMap에서 저장하고 실행한 결과 순서 없이 출력이 되었습니다.

TreeMap에서 저장 후 실행한 결과 오름차순으로 출력되었음을 확인할 수 있습니다.이렇게 HashMap에서 TreeMap은 사용법은 같지만 출력 방법으로 TreeMap이 오름차순으로 나열되어 출력되는 것을 알 수 있습니다.

이상으로 Map에 대해 알아봤습니다!!

error: Content is protected !!