프로그래밍 공부/JAVA

[JAVA] Collection 자료구조 정리

valid_ming 2021. 3. 4. 23:02

[출처] https://static.javatpoint.com/images/java-collection-hierarchy.png

 

List

: 배열과 비슷한 자료형, 원소의 개수가 가변적일 때 사용한다.

 

- add(val): 배열에 끝에 val 삽입

- add(idx, val): idx 위치에 val 삽입 

set(idx, val): idx 위치의 원소를 val 값으로 변경 

- get(idx): idx에 해당하는 값을 반환

- size(): 리스트의 개수 반환

- contains(val): 리스트에 val이 있다면 true 반환

- remove(val): val 삭제 후 삭제 결과 반환(true/false)

- remove(idx): idx위치 값 삭제 후삭제된 항목 반환

- clear(): 리스트의 모든 값 삭제

 

ArrayList

: List 인터페이스를 구현한 클래스

 

LinkedList

: 원소들을 인덱스로 관리하는 arraylist와 달리 링크를 이용하여 원소들을 관리한다.

원소를 삽입, 삭제하는 연산이 많이 발생할 때 성능이 좋다.

 

Vector

: arraylist와 달리 동기화된 메서드로 구성되어 있어 멀티 스레드 환경에서 안전하게 사용 가능하다.

 

 

Queue

: FIFO를 구현한 자료형, LinkedList 클래스를 이용하여 선언한다.

Queue<Integer> queue = new LinkedList<Integer>();

- add(val): val 값 삽입, 저장공간 부족하면 오류 발생 (IllegalStateException) 

offer(val): val 값 삽입, 삽입 결과 반환(true/false)

element(): 삭제 없이 요소 반환, 큐가 비어 있으면 오류 발생

peek(): 삭제 없이 요소 반환, 큐가 비어 있으면 null 반환

remove(): 큐에서 요소를 삭제하고 요소 반환, 큐가 비어 있으면 오류 발생

poll(): 큐에서 요소를 삭제하고 요소 반환.

 

PriorityQueue

: 우선순위가 높은 요소부터 반환,우선순위는 숫자가 작을수록 높다.

숫자가 아닌 다른 객체라면 객체 비교 방법을 제공해야 한다.

// 값이 큰 순서대로 
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

// 객체가 클래스인 경우, 클래스 선언
public class Student implements Comparable<Student>{
	int num;
    String name;
    
    @Override
    public int compareTo(Student o){
    	return this.num-o.num; // num 값이 작을 수록 우선순위가 큼
    }
}

Deque

: 큐의 양쪽으로 삽입과 삭제 연산을 수행한다. arrayList를 이용하여 선언한다.

Deque<Integer> queue = new LinkedList<Integer>();

 

- 큐 메서드의 뒤에 First 또는 Last를 붙여 사용한다.

 

Set

: 요소의 저장 순서를 유지하지 않고, 중복 저장을 허용하지 않는 인터페이스

 

- add(val): 값 추가

- size(): set의 개수 반환

- contains(val): set에 val이 있다면 true 반환

- remove(val): val 삭제 후 삭제 결과 반환(true/false)

- clear(): 리스트의 모든 값 삭제

 

HashSet

: 요소를 hash table에 저장. set을 구현한 클래스 중 가장 성능이 좋다

 

TreeSet

: 요소의 값에 따라 정렬되어 저장된다.

 

LinkedHashSet

: 연결된 목록 타입으로 구현된 hash table에 저장되어 저장된 순서에 따라 값이 정렬됨

 

Stack

: LIFO를 구현한 자료형 클래스

 

- push(val): val 값 삽입

- peek(): 삭제 없이 요소 반환

- pop(): 요소 반환 후 요소 삭제

- empty(): 비어있는지 판별

- search(val): val 값 스택에 존재하는지 확인