Java

Java : Collection Framework(ArrayList, LinkedList, Stack, Queue)

흰색기린 2021. 11. 29. 20:39

컬렉션(collection)

- 여러 객체(데이터)를 모아 놓은 것을 의미

 

프레임웍(framework)

- 표준화, 정형화된 체계적인 프로그래밍 방식

 

컬렉션 프레임웍(collections framework)

- 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식

- 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공

- java.util패키지에 포함. JDK1.2부터 제공

 

컬렉션 클래스(collection class)

- 다수의 데이터를 저장할 수 있는 클래스


컬렉션 프레임웍의 핵심 인터페이스

List Set Map

언터페이스 특 징
List 순서가 있는 데이터의 집합.
데이터의 중복 허용
ArrayList, LinkedList, Stack, Vector 등
Set 순서를 유지하지 않는 데이터의 집합,
데이터의 중복을 허용하지 않는다.
HashSet, TreeSet 등
Map 키(key)와 값(value)의 쌍(pair)으로
이루어진 데이터의 집합
순서는 유지되지 않으며,
키는 중복을 허용 하지 않고, 값의 중복을 허용한다.
HashMap, TreeMap, Hashtable,
Properties 등

 

ArrayList

- ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일

  ArrayList와 달리 Vector는 자체적으로 동기화처리가 되어 있다.

- List인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.

- 데이터의 저장공간으로 배열을 사용한다.(배열기반)

 

Collection은 인터페이스, Collections는 유틸 클래스

 

ArrayList에 저장된 객체의 삭제과정은

for(int i=0; i<list.size(); i++)
	list.remove(i);

형태로 진행하게 되면은

0일때 처음의 0을 지워주고 나머지 데이터가 올라가서 삭제가 이상하게 된다.

for(int i=list.size()-1; i>=0; i--)
	list.remove(i);

ArrayList의 저장된 마지막 객체부터 삭제하면 삭제가 잘 된다.


 

배열의 장단점

장점 : 배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간(접근 시간, access time)이 짧다.

 

단점 : 크기를 변경할 수 없다, 비순차적인 데이터의 추가,삭제에 시간이 많이 걸린다.

- 크기를 변경해야 하는 경우 새로운 배열을 생성 후 데이터를 복사해야 함

- 크기 변경을 피하기 위해 충분히 큰 배열을 생성하면, 메모리가 낭비됨.

- 데이터를 추가하거나 삭제하기 위해, 다른 데이터를 옮겨야 됨.

- 순차적인 데이터 추가와 삭제는 빠르다.

 

배열의 단점을 보완하기 위해서 나온것이 Linked List

Linked List 

- 배열과 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결(Link)

 

컬렉션 읽기(접근시간) 추가 / 삭제 비 고
ArrayList 빠르다 느리다 순차적인 추가삭제는 더 빠름
비효율적인 메모리사용
LinkedList 느리다 빠르다 데이터가 많을수록 접근성이 떨어짐

스택과 큐 (Stack & Queue)

스택(Stack) : LIFO구조. 마지막에 저장된 것을 제일 먼저 꺼내게 된다. (밑이 막힌 상자)

큐(Queue) : FIFO구조. 제일 먼저 저장한 것을 제일 먼저 꺼내게 된다.