Java

Java Collection(1)

Wisest 2015. 8. 6. 20:20

각각의 Collection 들의 장단점을 알고 적재 적소에 사용해보자

 

 

ArrayList 

 

 ArrayList는 List 인터페이스를 구현하므로, 저장순서가 유지가되고 중복을 허용한다.  배열기반으로 사용하며 자체적으로 동기화 처리가 되어 있지 않다.

구조가 간단하며 Access Time 이 가장 빠르다.  대표적으로 가장많이 쓰는 ArrayList의 단점은 크기를 변경 할 수가 없다. 크기를 변경해아 하는 경우 새로운 배열(List) 를생성하고 데이터를 복사하여 넣는다 (비용이 큼)

또한 크기를 변경하기 위해 충분히 큰 배열을 생성하면 메모리의 낭비가 발생한다.

비순차적인 데이터의 추가, 삭제에 시간이 많이 거린다.

비순차적인 데이터의 추가나 삭제시에 비효율적이다.(순차적으로 데이터 추가나 삭제는 빠르다)

 

 

LinkedList 

 

 배열의 단점을 보완하여 불연속적인 데이터를 연결한다. 비순차적인 데이터를 추가 삭제하여야 하기 때문에 비순차적인 데이터에 접근하는 시간(Access Time)이 느리지만 비순차적 데이터 추가 삭제하는경우엔 ArrayList 보다 빠른속도를 보장한다.

ps. 원리를 정확히 파악하는것이 중요한데, 데이터의 처리량이나 형태 순서 크기에 따라서 무조건 비순차적인 데이터 추가 삭제시 LinkedList가 빠른것이 아니며 비순차적인 데이터 추가 삭제를 ArrayList 보다 빠르게 처리하는 시간보다 AccessTime 이 더 오래걸리는 데이터일경우 느릴 수 있다.

 

 

Stack

 

자료구조의 LIFO 방식이다 (Last In First Out) 마지막에 저장된 것을 제일 먼저 꺼내게 된다.

군대에 다녀온 남성이 이라면 탄창에 실탄이든 공포탄이든 넣어본적이 있을 것이다. GOP에서 근무해서 Stack 연습 진짜 많이했다. 근무투입때 실탄넣고 마지막에 공포탄 3발을 넣는다. 그리고 근무가 끝나고 다시 철수하여 총알 뺄땐 공포탄 3발을 가장먼저 뺄수밖에 없다. 그리고 나머지 실탄을 뽑는다. ㅎㅎㅎ 이상한 예같지만 그게 스택구조라 느껴지는건 나만 그런것인가.ㅎ

 

Queue

 

 자료구조의 FIFO 방식이다 (First In First Out) 처음에 저장된 것을 제일 먼저 꺼낸다. ㅎㅎ 설명이 잘될지는 모르겟지만 재밌는 예를 하나 들면 학창시절에 점심시간만 되면 급식실이든 매점이든 미친듯이 뛰어나간적이 있을 것이다. 제일 먼저 급식실 줄 이나 매점 줄 이란 저장소에 먼저 도착한 놈이 빵을 먼저 먹던지 밥을 먼저 먹는다...ㅎㅎ 먼저 저장된놈이 먼저 빠진다.

 

 

 

 

일단 테스트 코딩하면서 직접 이해하고 글을 써서 이정도만 적는데도 상당히 오랜시간이 걸렸네요. 다음엔 HashSet , TreeSet 시간이된다면 HashMap, TreeMap 까지 적어봐야겟어욤!

혹시나 제가 혼란을 주거나 잘못된 이론을 내세운 부분이 있으면 많은 지적 부탁드려요!