맵과 딕셔너리(Map and Dictionaries)

상위문서 : 자료구조

필수참고문서 : 연결리스트


목차

1. 개요
2. 설명
3. 구현
3.1. JAVA로 구현
3.2. C#으로 구현


1.개요

맵은 키와 값을 가지고 있는 엔트리의 집합이다. 맵의 특징은 같은 키를 가지고 있는 엔트리는 허용하지 않는 다는것인데 먼저 3이라는 키로 엔트리가 들어오면 나중에 3이라고 들어온 엔트리로 그 교체해버리고 예전에 있던 엔트리의 값을 반환한다. 또한 맵에서 중요한게 iterator(반복자)도 알아야하는데 
먼저 이터레이터가 가지고 있는 매서드를 필수적으로 알아야한다.
  • hasNext() - 다음 값이 있는지 확인하는 매서드이다. 있으면 true 없으면 false를 리턴한다.
  • next() - 다음 값을 리턴한다.
  • remove() : 삭제
의 매서드를 가지고 있는데 이때 게임 제목과 키들을 넣은 맵에서 다음과 같이 쓸 수 있다. 


iterator<Entry> map=game.iterator();

이렇게 되면 map이라는 변수안에 Entry 형태의 모든 값들이 저장된다. 일단 제일 앞에 있는 엔트리를 가르키게 되는데

while(map.hasNext())을 하면 map의 끝까지 돌 수 있다.
또한 map.value.next() 로 위의 while과 결합하면 값을 처음부터 끝까지 가져올 수 있는 것이다.

맵의 구현은 이중 연결리스트로 한다.
딕셔너리는 키로 항목 검색이 가능한 셋이다. 딕셔너리로 할 수 있는 작업은 맵과 99%동일한데 한가지가 차이가 난다. 바로 같은 키를 가지는 엔트리를 여러개 가질 수 있다는 것이다.

딕셔너리 또한 구현은 이중 연결리스트로 한다.

2.설명

맵의 ADT는 다음과 같다.
  • get(key) : 맵에서 입력받은 키에 해당하는 엔트리가 있을경우 값을 돌려주고 없으면 null을 돌려준다. O(n)
  • put(key, value) : 맵에 엔트리를 넣는다. 만약 입력받은 키에 해당되는 엔트리가 없을 경우 넣는것이 성공하며 null을 반환한다. 만약 이미 있으면 키에 해당하는 값을 반환하고 새 값을 넣는다.
  • remove(key) : 입력받은 키에 해당하는 엔트리를 삭제한다.
  • size(), isEmpty() : 약방의 감초 맵에 엔트리가 몇개있는지 알아보는 사이즈와 맵이 비어있는지 확인하는 이즈엠피티다.
  • keys() : 현재 맵에 있는 모든 키를 반환한다. 반환형태는 iterator로 반환
  • values() : 현재 맵에 있는 모든 값을 반환한다. 반환형태는 iterator로 반환 
딕셔너리의 ADT는 다음과 같다.

  • find(key) : 입력받은 키에 해당하는 엔트리가 있을 경우 값을 돌려주고 없으면 null을 돌려준다.
  • findAll(key) : 같은 키의 엔트리의 값을 전부 반환한다. 반환값은 iterator로 반환한다.
  • insert(key, value) : 엔트리를 넣는다. 키가 중복되도 되기때문에 실패할 경우가 없다.
  • remove(key) : 입력받은 키에 해당하는 엔트리를 삭제한다.
  • entries() : 딕셔너리 전체에 있는 모든 엔트리를 반환한다. 이 역시 반환 형태는 iterator이다...
  • size(), isEmpty() : 말안해도 알듯
여기서 중요한 것은 딕셔너리는 중복된 값을 넣을 수 있는데 remove와 find 연산시 처음 넣은 값과 나중 넣은 값 어떤것이 먼저 나오냐 하면 처음 넣은 값이 먼저 나온다. 나중에 넣은 값은 처음 넣은 값을 삭제해야 한다. 아니면 findAll을 사용하여 볼 수도 있다.

3. 구현

3.1.JAVA로 구현

3.2.C#으로 구현

on 2017년 6월 12일 월요일 | A comment?
0 responses to “맵과 딕셔너리(Map and Dictionaries)”

Leave a Reply

최근 많이 본 글