-
[Java] List 컬렉션 클래스프로그래밍/JAVA 2022. 8. 9. 22:08728x90
List 컬렉션 클래스는 순서가 있는 데이터들의 집합으로 데이터의 중복을 허용하는 특징을 가지고 있다.
대표적인 List 컬렉션 클래스는 Vector, ArrayList, LinkedList, Stack, Queue가 있고 하나씩 알아보자.
Vector <E> 클래스
vector 클래스는 자바 1.0부터 존재하는 레거시 클래스로 배열과 동일하게 정수 인덱스를 이용하여 액세스 할 수 있고 동적인 길이로 여러 데이터형을 저장하기 위해 사용된다. 동기화가 되어 있으며 한번에 하나의 스레드만 벡터의 메소드를 호출 할 수 있다.
Vector<타입> 참조변수 = new Vector<>(요소의 개수); addElement() : 요소를 추가 size() : 요소의 개수를 반환 capacity() : 현재 벡터에 저장 가능한 크기를 반환 get() : 인덱스로 저장된 값을 찾아 반환 removeAllElement() : 저장된 모든 요소를 삭제 set() : 인덱스로 저장된 값을 변경(설정) 참조변수.set(인덱스, 값);
ArrayList <E> 클래스
JDK 1.2부터 제공되어 배열과 동일하게 정수 인덱스를 이용하여 엑세스할 수 있다. 또한 동적인 길이로 여러 데이터형을 저장하기 위해 사용한다. 요소의 추가 및 삭제에 걸리는 시간이 소요된다는 단점이 존재한다. 비동기식을 사용하며 멀티 스레드를 지원한다.
ArrayList<타입> 참조변수 = new ArrayList(); add() : 요소를 추가 size() : 요소의 개수 반환 remove() : 인덱스를 이용하여 요소를 삭제 set() : 인덱스로 저장된 값을 변경(설정)
public static void main(String[] args) { ArrayList<Integer> arrayList = new ArrayList<>(); arrayList.add(80); // 요소 추가 arrayList.add(100); arrayList.add(65); arrayList.add(90); arrayList.add(55); System.out.println(arrayList); // [80, 100, 65, 90, 55] for (int i = 0; i < arrayList.size(); i++) { System.out.print(arrayList.get(i) + " "); // 80 100 65 90 55 } System.out.println(""); arrayList.remove(2); // 인덱스 System.out.println(arrayList); // [80, 100, 90, 55] arrayList.set(0,60); // 해당 인덱스의 값 바꾸기 System.out.println(arrayList); // [60, 100, 90, 55] // 탐색 Iterator<Integer> iterator = arrayList.iterator(); while(iterator.hasNext()){ System.out.print(iterator.next() + " "); // 60 100 90 55 } System.out.println(""); }
LinkedList <E> 클래스
JDK 1.2부터 제공되어 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식이다. 배열과 같이 순차적으로 저장하는 ArrayList 에 비해 데이터의 추가나 삭제가 빠른 장점을 가지고있으나 인덱스가 없기 때문에 특정요소에 접근이 느리다. 즉, 탐색 속도가 느린 단점이 존재한다.
탐색 또는 정렬을 자주하는 경우에는 ArrayList을 사용하고, 데이터의 추가/삭제가 많은 경우에는 LinkedList를 사용하는 것이 좋다.
public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("홍길동"); linkedList.add("이순신"); linkedList.add("임꺽정"); linkedList.add("유관순"); System.out.println(linkedList); // [홍길동, 이순신, 임꺽정, 유관순] System.out.println(linkedList.peek());// 홍길동 : 첫번째 데이터 반환 System.out.println(linkedList.poll());// 홍길동 : 첫번째 데이터 반환 및 삭제 System.out.println(linkedList); // [이순신, 임꺽정, 유관순] linkedList.remove("임꺽정"); // 입력값 삭제 System.out.println(linkedList); // [이순신, 유관순] }
Stack <E> 클래스
한쪽 끝에서만 자료를 넣고 뺄 수 있는 형식의 자료구조로 흔히 LIFO(Last input First out)라고한다.
Stack<타입> 참조변수 = new Stack<>(); push() : 요소를 저장 peek() : 마지막 데이터(첫번째 뽑힐)를 반환 pop() : 마지막(첫번째 뽑힐) 데이터를 반환 하고 삭제 search() : 데이터의 순서를 반환
public static void main(String[] args) { Stack<Integer> stack = new Stack<>(); stack.push(40); // 요소 추가 stack.push(100); stack.push(80); stack.push(50); stack.push(20); System.out.println(stack); // [40, 100, 80, 50, 20] : 순서 있음 System.out.println(stack.peek()); // 20 : 마지막 데이터 반환 System.out.println(stack); // [40, 100, 80, 50, 20] System.out.println(stack.pop()); // 20 : 마지막 데이터 반환 및 삭제 System.out.println(stack); // [40, 100, 80, 50] System.out.println(stack.search(40)); // 4 : 뽑힐 순서[ 4, 3, 2, 1] stack.clear(); // 데이터 모두 삭제 System.out.println(stack); // [] }
Queue <E> 클래스
큐는 한쪽 끝을 프론트로 정하여 삭제 연산만 수행하고 다른 한쪽 큐를 리어로 정하여 삽입 연산만 수행한다. FIFO(First in First out)를 의미하고 예로 운영체제의 스케줄러, 푸시 메세지에서 사용된다.
Queue<타입> 참조변수 = new LinkedList<>(); offer() : 요소 추가 peek() : 첫번째 데이터를 반환 poll() : 첫번째 데이터를 반환하고 삭제 remove() : 값 제거 clear() : 저장된 모든 요소를 삭제
public static void main(String[] args) { Queue<Integer> queue = new LinkedList<>(); queue.offer(10); queue.offer(50); queue.offer(80); queue.offer(20); queue.offer(70); System.out.println(queue); // [10, 50, 80, 20, 70], 순서가 있음 System.out.println(queue.peek()); // 10, 첫번째 데이터를 반환 queue.poll(); // 첫번째 데이터 삭제 System.out.println(queue); // [50, 80, 20, 70] queue.remove(); // 첫번째 데이터 삭제 System.out.println(queue); // [80, 20, 70] queue.clear(); // 모든 데이터 삭제 System.out.println(queue); // [] }
728x90'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] Map 컬렉션 클래스 (0) 2022.08.09 [Java] Set 컬렉션 클래스 (0) 2022.08.09 [Java] 컬렉션 프레임워크(collection framework) (0) 2022.08.09 [Java] 인터페이스(interface) (0) 2022.08.08 [Java] 추상 클래스(abstract class) (0) 2022.08.08