HJW's IT Blog

[JAVA] Collections Framework (Linked List, Stack, Queue, Set) 본문

JAVA

[JAVA] Collections Framework (Linked List, Stack, Queue, Set)

kiki1875 2024. 10. 13. 17:42

Linked List

Linked List 특징

  • 이중 연결 리스트로, 각 요소는 이전 및 다음 요소에 대한 참조 를 가진다
  • 삽입 및 삭제 작업이 효율적이다
  • 요소들이 삽입된 순서대로 유지된다
  • 임의 접근 속도가 느리다 → 특정 인덱스 접근 시간 O(n)
  • Queue 와 Deque를 지원

메서드

LinkedList<Integer> list = new LinkedList<>();

list.add(1); // 리스트 끝에 추가
list.add(index, 1); // index 위치에 삽입
list.addFirst(1) // 리스트의 첫번째에 삽입

list.remove(); // 첫 요소 삭제
list.remove(index); // index 위치 요소 제거
list.removeLast()' // 마지막 요소 삭제

list.get(index); // 특정 인덱스의 요소 반환
list.getFirst();
list.getLast();

list.poll(); //첫 요소 제거 및 반환
list.peek(); // 첫 요소 제거없이 반환

Stack

Stack 특징

  • LIFO(Last In First Out) 의 구조로, 마지막에 들어간 요소가 가장 먼저 나온다
  • Vector 를 상속받은 클래스이기 때문에, vector 메서드 사용이 가능하다
  • 입출력이 한쪽에서만 이루어 진다.

메서드

Stack<Integer> s = new Stack<>();

s.push(10); 
s.pop();
s.peek(); // 제거 없이 맨위 반환
s.isEmpty(); // 비어있는지 확인
s.search(value); // 스택에서 특정 객체를 찾아 위치를 반환

Queue

Queue 특징

  • FIFO 구조
  • 삽입연산, 삭제 연산
  • PriorityQueue, ArrayDeque 등 여러 구현체가 존재한다

메서드

 Queue<String> queue = new LinkedList<>();
 
 queue.add();
 queue.remove();

 

 

Set

특징

  • 순서가 없는 자료구조
  • 중복 값을 허용하지 않는다
  • Collection interface 를 상속받기에, collection 메소드 사용 가능
  • HashSet, LinkedHashSet, TreeSet 이 있다

HashSet

  • 순서를 보장하지 않으며 null 값을 허용한다
  • 빠른 검색과 삽입
  • 중복 방지가 목적일 때 효과적이다
Set<String> s = new HashSet<>();

LinkedHashSet

  • 요소들이 추가된 순서를 유지한다
  • 중복 방지 + 삽입 순서가 중요할 때 사용
Set<String> s = new LinkedHashSet<>();

TreeSet

  • 요소들이 오름차순 으로 정렬된다
  • 중복 방지 + 정렬된 요소가 필요할 때 사용
Set<String> s = new TreeSet<>();

Methods

Set<String> set = new HashSet<>();
set.add(value);

List<String> list = Arrays.asList("apple", "banana", "apple");
set.addAll(list);  // 중복된 요소는 추가되지 않음

set.clear(); // 모든 요소 제거
set.contains("apple") // 요소가 포함되어 잇는지 
set.containsAll(list) // 모든 요소가 포함되어 있는지
set.isEmpty() // 비어있는지 확인

Iterator<String> it = set.iterator();
while(it.hasNext()){
	System.out.println(it.next());
}

set.remove("apple"); // 요소 제거
set.retainAll(list) // list 에 포함된 요소외에 모두 제거

set.size() // 크기 반환