ILoveCoffee, ILoveJava

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

jeeyong 2008. 1. 31. 12:02

먼저 범주부터 나열하자면 다음과 같습니다.

List 계열 : AbstractList, ArrayList, LinkedList, Vector

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

Set계열 : AbstractSet, HashSet, LinkedHashSet, TreeSet


위의 List, Map,Set은 모두 Collection이라는 interface를 상속받은 자식입니다.(인터페이스끼리 extend 할수있죠)

그리고 AbstractList, ArrayList, ... 등은 List 인터페이스를 구현(Implement)한 객체고
AbstractMap, Attributes, ...등은 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는 그렇지 않다는 정도입니다.(물론 특정상황에서는 이것이 매우 중요한 문제가 될 수 있습니다.)

각 객체들에 대한 자세한 내용은 api를 통해 알 수 있습니다.

'ILoveCoffee, ILoveJava' 카테고리의 다른 글

JDK5.0에서 새로 생긴 부분  (0) 2008.04.11
사용자 정의 Exception Class  (0) 2008.02.01
InputStream & OutputStream 예제  (0) 2008.01.28
java jar파일로 exe(실행파일) 만들기  (1) 2008.01.28
Warming up_01  (0) 2008.01.19