2009년 6월 28일 일요일

Vector, Set, ArrayList, Map등등의 차이점

Map 계열 : AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap

Set계열 : AbstractSet, HashSet, LinkedHashSet, TreeSet

 

위의 List, Map,Set은 모두 Collection이라는 넘의 자식이라고 생각하시면됩니다.

말그대로... 먼가를 수집하는 박스라는 의미이죠.

 

Collection, List, Map,Set은 모두 구현되지 않은 interface입니다. 그냥 이러이러하다고 틀만 잡아놓은거죠... 이것들을 실제로 사용할 수 있게 구현한것이 위에 적어 놓은 자식들입니다.

예를들어보자면..

List a = new Vector();  --> 다형성(부모는 여러가지 자식의 형태로 나타날 수 잇다.)의 예가됩니다.

이러한 것은 가능하지만...

List a = new List();

이렇게는 사용할 수없다는 것입니다.

 

 

 

이러한 Collection 의 자식들은 자신들만의 고유한 특징을 명확히 가지게됩니다.

List :  수집의 순서가 있으며, 동일한 데이터의 중복 입력이 가능합니다.

          순차적으로 대량의 데이터를 억세스하거나 입력할때 유리한 방식입니다.

 

Map : Key & Value의 형태로 입력이되며, 키값을 입력하면 해당하는 value값을 획득할 수있습니다. 수집의 순서를 기억하지 않으며, 동일한 데이터를 Key값으로 사용할 수 없습니다. (물론 key값이 틀리고 value값이 동일한건 가능합니다.)

다건의 데이터에서 원하는 특정 데이터에 접근(검색)할 때 유리한 방식입니다.

 

Set : 중복데이터를 불허하는 것을 제외하고는 큰 특징이 없습니다.

      입력되는 당시의 순서에는 따르지 않으나... 순차적인 접근을 위해서는 Iterator로 접근하게됩니다.

 

그리고 각가의 구현 class들의 특징도 조금씩이나마 차이가 발생합니다.

음.. 예만 들어보자면... 같은 Map 계열임에도 불구하고.. HashMap은 데이터 입출력이 동기화되지 않고 처리속도가 빠른 반면  HashTable은 모든 입출력이 동기화(토근을 부여받아 순차적으로 객체에 접근)되며 처리속도는 다소 떨어지게됩니다.

 

그외 List계열의 Vector와 ArrayList도 Vector가 synchronized(동기화) 되는 반면 ArrayList는 그렇지 않다는 정도입니다.(물론 특정상황에서는 이것이 매우 중요한 문제가 될 수 있습니다.)

댓글 없음:

댓글 쓰기