put이라는 메서드의 도큐먼트 설명을 제대로 보지 않고,


단순하게 map이 중복을 허용하지 않기 때문에 put해도 중복된 키는 덮어쓰지 않고
튕겨 낼것이라 판단했다.

그리하여 map에 객체를 넣는데 있어..
isContainsKey() 메서드를 사용하지 않고 바로 put을 사용했다.

지금 확인해본 결과 put 메서드는 중복된 키값이 존재하면 덮어쓰고, 기존 키,오브젝트를
반환한다는 것을 알게 되었다. (나는 set의 add()처럼 저장을 거부할줄로만 알았다)

map자료구조에 add,remove는 있지만, 왜 set(update용 인터페이스)가 존재하지 않는
지를 생각해야한다. 또한 덮어쓰기(update)의 개념이 왜 필요한지도 생각해야한다.
키값은 동일하게 유지하되, 값을 변경하고 싶은 경우가 있을수 있다. (셋은 단일 원소(오브젝트)
의 집합(동일타입) vs 맵은 단일원소의 집합이 아니다.)
 
set에는 add(),remove()가 필요하고, map의 경우엔 put(add() + set()) ,remove가
필요한 것이다. 


똑똑한 개발자 분들이.. MAP, SET 자료 구조를 별도로 구현한 것은, 각각의 역할과 특성이 다르기 때문이다.
SET 은 영어 그대로 집합 = 중복 요소 금지 하는 자료구조이다.
MAP 은 데이터의 보관->검색(활용)시 이점을 두기 위해 KEY,VALUE로 묶은 요소를 KEY의 중복없이(VALUE중복 가능)
관리하는 자료구조이다.

배열도, 연결 리스트도,큐,스택, 트리등등.. 각각의 역할및 장,단점과 사용해야할 곳, 쓰지 말아야 할곳이 존재한다.
(게임 프로그래밍 할때.. 맵을 관리하기 위해 4진 트리 (좌상,좌하,우상,우하)로 맵을 잘라서, 그것을 프랙탈 처럼 반복하는 구조를 사용했었다. 상기하자.. 자료구조를 사용하면, 특정 문제를 쉽게 관리할 수 있다.)

=> 자만하지 말것. 어설프게 알지 말것! api 도큐먼트 보고 메서드의 동작을 확실하게 
확인후 사용할것!


by givingsheart 2014. 1. 1. 15:45