태그 보관물: list

Java Collection

Collection은 레퍼런스 타입들을 유지하기 위한 메카니즘이다.
Java는 대충 아래의 클래스들로 구성이 되어 있습니다. 추가적으로 java.util.concurrent 패키지에 확장 Collection 클래스들도 있습니다.

Collection : 가장 상위 인터페이스
 + Set : 중복요소가 없는 컬렉션으로, 하위 인터페이스로 SortedSet이 있습니다.
 + List : 순서가 있는 컬렉션으로, 인덱스로 위치를 지정하여 값을 찾을 수 있습니다.
 + Queue : FIFO의 구조로 객체를 유지하는 컬렉션으로, 하위 인터페이스는 BlockingQueue가 있습니다.
 + Map : 키를 값에 매핑 하는 컬렉션으로, 중복키를 허용하지 않는다. 하위 인터페이스들은 ConcurrentMap, SortedMap이 있습니다.

Set
– AbstractSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet

List
– AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector

Queue
– AbstractQueue, ArrayBlockingQueue, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue, SynchronousQueue

Map
– AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap

Iterator보다 빠르게 Collection의 오브젝트 처리

Collection에 들어있는 오브젝트를 가져오기 위해서 일반적으로 Iterator 패턴을 구현한 Iterator 클래스를 많이 사용합니다. 하지만, Iterator클래스의 next()를 통해서 오브젝트를 가져오고, hasNext()를 통해서 오브젝트의 마지막을 체크하기 때문에, List 타입의 Collection에서는 get()를 사용하는 것이 더 빠르게 동작을 합니다.


ex) Iterator 클래스 사용예


Iterator iterator = array.iterator();
while (iterator.hasNext()) {
 Object object = iterator.next();
}

ex) List 타입의 get() 사용 예


int size = array.size();
for (int i=0; i<size ; i++) {
 Object object = array.get(i);
}

콜렉션(Collection) 초기화 개선

이 글에서는 콜렉션의 초기화하는 기본 방법과 조금 더 개선한 방법에 대해서 살펴보자. 이 글에서 개선의 관점은 코드의 가독성을 기준으로 한다.

1. 기본 방법

1.1 배열 초기화는 아래와 같이 사용할 수 있다.

String[] s = new String [] {"1", "2"};

1.2 콜렉션은 아래와 같이 사용할 수 있다.

List s = new ArrayList();
s.add("1");
s.add("2");

2. 개선한 방법

2.1 첫번째

List s = new ArrayList() {{ add("1"); add("2"); }};

위 코드는 아래처럼 풀어 볼수가 있다.

List s = new ArrayList() {
   {
      add("1");
      add("2");
   }
};

그러나, 이 코드는 개선된 코드라고 보여지지 않는다.

2.2 두번째

List s = Arrays.asList(new String[]{"1", "2"});

이 코드는 첫번째 방법보다는 비교적 개선된 모습이다.

2.3 세번째

List s = Arrays.asList("1", "2");

이 코드가 List을 초기화하는 가독성 좋은 코드이다.