[Java] 자료구조 공부 - Collection

가연우·2022년 5월 11일
0

Java Study

목록 보기
1/3

👍 코딩테스트나 프로젝트를 하며 많이 사용한 자료 구조를 공부합니다.

🍀Collection

  • 객체의 그룹을 조작하고 저장할 수 있는 자료구조

Collection의 하위 인터페이스

  1. List
  2. Queue
  3. Set

🎈List

  • 인덱스를 가지는 원소들의 모임
  • 중복값을 가질 수 있음.

1. ArrayList

  • 원소들을 인덱스로 접근
  • 배열과 달리 초기에 크기를 정해주지 않아도 데이터의 수에 따라 유동적으로 크기 변경
//import문
import java.util.ArrayList;

//ArrayList 선언
ArrayList<String> list = new ArrayList<String>();

//원소 삽입 1(순차적)
list.add("aaa");
list.add("bbb");

//원소 삽입2(특정 인덱스)
list.add("3","ccc");

//특정 인덱스의 원소를 변경
list.set("1","aaaaa");

//특정 인덱스의 원소 삭제
list.remove(1);

//특정 인덱스 원소 가져오기
list.get(0);

//맨 앞부터 원소 값으로 인덱스 가져오기
//원소가 없으면 -1 반환
int index = list.indexOf("bbb");

//맨 뒤부터 원소 값으로 인덱스 가져오기
//원소가 없으면 -1 반환
int index2 = list.lastIndexOf("ccc");

ArrayList는 배열과 비슷하지만 크기 선언을 해주지 않아도 된다는 장점을 가진 자료 구조

2. LinkedList

  • 원소를 링크로 연결
  • 자바에서 모든 연결리스트는 이중 연결 리스트(다음 원소와 이전 원소를 가리킴)
  • 원소가 삽입되고 삭제될 때 바로 앞에 있는 원소의 링크값만 변경하면 됨
  • 일반적으로 중간에서 데이터의 삽입이나 삭제가 발생할 경우 ArrayList보다 성능이 뛰어남
  • 사용법은 ArrayList와 동일
//import문
import java.util.LinkedList;

//LinkedList 선언문
LinkedList<String> list = new LinkedList<String>();

LinkedList는 배열 중간에 원소 삽입, 삭제 등이 일어나는 경우에 사용한다.

3. Stack

  • LIFO (Last In First Out)
  • tail에 원소 추가, tail에서 원소 삭제
//import문
import java.util.Stack;

//Stack 선언
Stack<String> stack = new Stack<>();

//원소 삽입
stack.push("1");
stack.push("2");

//원소 삭제
//가장 마지막에 저장한 값 삭제
stack.pop();

//원소 전제 삭제
stack.clear();

//원소 제일 위에 있는 값 가져오기
stack.peek();

//stack에 저장된 원소의 수
stack.size();

//stack 원소 여부 체크
//원소가 하나 이상일 경우 true, 하나도 없을 경우 false 반환
stack.empty();

//원소 값 찾기
//원소가 있을 경우 true, 없을 경우 false 반환
stack.contains("1");

Stack은 늦게 들어온 값이 먼저 나가는 자료구조이다.

🎈Queue

  • 데이터를 처리하기 전 잠시 저장하고 있는 자료구조
  • FIFO (First In First Out)
  • tail에 원소를 추가, head에서 원소 삭제
//import문
import java.util.LinkedList;
import java.util.Queue;

//Queue 선언
Queue<String> queue = new LinkedList<>();

//원소 삽입
queue.add("11");
queue.offer("22");

//원소 삭제
queue.remove();

//원소 가져온 후 삭제
queue.poll();

//원소 전체 삭제
queue.clear();

//가장 먼저 삽입된 값 가져오기
queue.peek();

Queue는 먼저 들어온 값이 먼저 나가는 자료구조이다.

1. Priority Queue

  • 우선순위가 높은 순으로 데이터가 나감
  • 우선순위 힙으로 구현 가능
  • null 허용 안됨
//import문
import java.util.PriorityQueue

//Priority Queue 선언
//우선순위가 낮은 숫자 순
PriorityQueue<String> priorityQueue = new PriorityQueue<>();

//우선 순위가 높은 숫자 순
PriorityQueue<String> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());


//원소 삽입
priorityQueue.add("1");
priorityQueue.offer("2");

//원소 삭제
//첫번째 값을 가져온 후 제거
priorityQueue.poll();

//첫번째 값 제거
priorityQueue.remove();

//원소 전체 삭제
priorityQueue.clear();

//원소 첫번째 값 가져오기
priorityQueue.peek();

PriorityQueue는 우선순위가 높은 순대로 정렬되는 FIFO 자료구조이다.


🎈Set

  • 원소 간에 순서가 없음
  • 원소 간의 중복값을 허용 안함

1. HashSet

  • set의 특징을 그대로 가지고 있음.
//import문
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

//HashSet 선언
Set<String> hashset = new HashSet<>();

//원소 추가
hashset.add("1");
hashset.add("2");


//원소 삭제
hashset.remove("1");

//원소 전체 삭제
hashset.clear();

//원소 개수 구하기
hashset.size();

//값 출력
//일반적인 자료구조와 다르게 get을 지원하지 않음
Iterator iter = hashset.iterator();
while(iter.hasNext()) {
    System.out.println(iter.next());
}

//원소 검색하기
//값이 있으면 true, 없으면 false
hashset.contains("2");

HashSet은 중복값을 허용하지 않고 인덱스가 없는 자료구조이다.

2. LinkedHashSet

  • set의 특징을 그대로 가지고 있음.
  • HashSet과 다르게 삽입된 순서로 정렬됨
//import문
import java.util.Set;
import java.util.LinkedHashSet;
import java.util.Iterator;

//LinkedHashSet 선언
Set<String> linkedHashSet = new LinkedHashSet<>();

//원소 삽입
linkedHashSet.add("1");
linkedHashSet.add("2");

//원소 삭제
linkedHashSet.remove("1");

//원소 전제 삭제
linkedHashSet.clear();

//원소의 개수
linkedHashSet.size();

//값 출력
Iterator iter = linkedHashSet.iterator();
while(iter.hasNext()) {
    System.out.println(iter.next());
}

LinkedHashSet은 중복값을 허용하지 않고 삽입된 순서대로 정렬되는 자료구조이다.

profile
헐 제가 회사를 다니면서 개발을 하고 있어요 이게 무슨 일이죠?

0개의 댓글