JAVA

(JAVA) 컬렉션 프레임워크 정리하기

lastdove 2024. 9. 14. 09:22

List

  1. 배열 (Array)
    • 정적 배열 : 크기가 고정되어 있으며, 생성 시 크기를 지정합니다.

예시)

int[] array = new int[5];  // 길이가 5인 정적 배열
  1. 리스트 (ArrayList)
    • 동적 배열 : 크기가 가변적이며, 요소를 추가하거나 삭제할 수 있습니다.

예시)

import java.util.ArrayList;

ArrayList<String> list = new ArrayList<>();  // ArrayList 선언
list.add("Apple");  // 요소 추가
list.add("Banana"); 
list.set(1, "Orange");  // 위치 1의 요소를 "Orange"로 변경
list.remove(0);  // 위치 0의 요소 삭제
list.clear();  // 리스트의 모든 요소 삭제
  1. 연결 리스트 (LinkedList)
    • 메모리의 여러 위치에 데이터를 저장하며, 각 요소가 다음 요소를 참조합니다.
    • 속도가 상대적으로 느림.예시)
import java.util.LinkedList;

LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Apple");
linkedList.add("Banana");
linkedList.set(1, "Orange");
linkedList.remove(0);
linkedList.clear();
**의문점** : linkedlist랑 arraylist 둘 중에 하나를 택해서 사용해야될 특정 상황이 있는가?

- `ArrayList`는 인덱스 접근이 빠르지만, 중간에 요소를 삽입하거나 삭제할 때 느릴 수 있습니다.
- `LinkedList`는 요소 삽입과 삭제가 빠르지만, 인덱스 접근 속도가 느릴 수 있습니다.

Stack

  • 수직으로 값을 쌓는 데이터 구조입니다.

예시)

import java.util.Stack;

Stack<String> stack = new Stack<>();
stack.push("Apple");  // 값 추가
stack.push("Banana");
String last = stack.pop();  // 마지막에 추가된 값 제거 및 반환
boolean empty = stack.isEmpty();  // 스택이 비어있는지 확인
String peek = stack.peek();  // 마지막에 추가된 값 조회

Queue (FIFO : First In First Out)

  • 가장 먼저 들어온 요소가 가장 먼저 나오는 데이터 구조입니다.

예시)

import java.util.LinkedList;
import java.util.Queue;

Queue<String> queue = new LinkedList<>();
queue.offer("Apple");  // 값 추가
queue.offer("Banana");
String first = queue.poll();  // 가장 먼저 들어온 값 제거 및 반환
boolean empty = queue.isEmpty();  // 큐가 비어있는지 확인

Set

  • 순서를 보장하지 않고 중복을 허용하지 않는 데이터 구조입니다.
    • HashSet : 중복된 요소를 허용하지 않으며 순서를 보장하지 않습니다.
    • TreeSet : 중복된 요소를 허용하지 않으며 오름차순으로 정렬됩니다.
    • LinkedHashSet : 중복된 요소를 허용하지 않으며 삽입 순서를 유지합니다.

예시)

import java.util.HashSet;
import java.util.TreeSet;
import java.util.LinkedHashSet;
import java.util.Set;

Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");

Set<String> treeSet = new TreeSet<>();
treeSet.add("Banana");
treeSet.add("Apple");

Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("Banana");
linkedHashSet.add("Apple");

boolean contains = hashSet.contains("Apple");  // Set에서 특정 값 존재 여부 확인

Map (Key-Value Pair)

  • 키와 값의 쌍으로 데이터를 저장합니다. 키는 중복되지 않아야 합니다.

예시)

import java.util.HashMap;
import java.util.Map;

Map<String, String> map = new HashMap<>();
map.put("fruit1", "Apple");
map.put("fruit2", "Banana");

String value = map.get("fruit1");  // 키에 해당하는 값 반환
Set<String> keys = map.keySet();  // 모든 키 반환
Collection<String> values = map.values();  // 모든 값 반환