[JAVA 문법 종합반 3일차-컬렉션Stack, Queue, Set, Map]

김동규·2023년 5월 25일
0

Stack (스택)

FILO (first in last out)의 자료구조를 가지고 있다.
push(넣기), peek(조회), pop(꺼내기)
데이터들을 나열하고 싶거나 데이터의 중복 처리를 막고 싶을때 사용한다.

기능

선언: Stack intStack 형태로 선언
생성: new Stack(); 형태로 생성
추가: intStack.push({추가할 값}) 형태로 추가
조회: intStack.peek() 형태로 맨 위 값을 조회 (맨 위임!)
꺼내기: intStack.pop() 맨위의 값을 꺼낸다. (꺼내고 나면 삭제 됨)

Stack pop 예제

출력값
1
15
10

  1. intStack이라는 변수에 스택으로 10 , 15, 1 순서로 값이 들어간 상태이다.
  2. while 문 실행 하여 가장 위에 있는 1이 출력되면서 pop(삭제)된다. 이후 15와 10이 반복되면서 삭제가 되고 변수 intStack의 값이 비어있게 된다.
  3. while 문의 조건이 false가 되면서 종료하게 된다.

while 문을 풀어서 생각하면 not(intStack의 값이 비어있다면) intStack의 값을 pop하라는 뜻이다.

여기서 !(not)을 주었기 때문에 해당 코드가 실행이 가능하다. !가 없다면, intStack의 값은 10, 15, 1의 값들이 들어있기 때문에 while문이 false가 되므로 실행이 되지 않기 때문이다.

Stack peek & size 예제

출력값
1
3

Queue (큐)

FIFO 의 자료구조
기능 add() , 조회 peek() , 꺼내기 poll() 기능만 존재
Linkedlist를 사용하여 Queue를 생성해서 받을 수 있다.
Queue는 생성자가 없는 인터페이스이다

기능

선언: Queue intQueue 형태로 선언
생성: new LinkedList<Integer<(); 형태로 생성
추가: intQueue.add({추가할 값}) 형태로 값을 맨위에 추가
조회: intQueue.peek() 형태로 맨 아래값을 조회
꺼내기: intQueue.poll() 형태로 맨 아래값을 꺼냄(꺼내고 나면 삭제됨)

Queue add 예제

출력값
1
5
9

  1. while 문이 실행하여 변수 intQueue가 비어있지 않을때 반복한다.
  2. Queue는 FIFO 형태의 자료구조이므로 먼저 들어간 1이 출력 후 삭제된다. 이후 1이 없으므로 2번째인 5가 출력 후 삭제되고, 마지막으로 3번째인 9가 출력후 삭제된다.
  3. intQueue가 비어있게 되므로 while문이 false값을 나오게 되며 while문을 빠져나온다.

Queue poll 예제

출력값
1

  1. poll은 맨 아래값(가장 첫번째로 들어간 값)을 불러온다. Queue는 FIFO형태의 자료구조이므로 가장 먼저 들어간 1을 불러온다.

Set

순서가 보장되지 않고 중복을 허용하지 않도록 유지가 가능한 자료구조
Set은 그냥 사용도 가능하지만, HashSet, TreeSet 등으로 응용하여 같이 사용도 가능하다.
생성자가 없는 껍데기로 바로 생성이 불가능하다!

생성자가 존재하는 HashSet을 이용하여 Set을 구현

출력값
1
5
9
12

변수 intSet 안에 1, 12가 중복이 되었으므로 각각 제외된 4번에 해당되는 값들만 출력되었다. (집합의 개념)

Set의 contains매서드 구동 예제

출력값
1
5
9
12
false
true
true

해당 매서드는 intSet 변수에 2 와 5를 각각 포함하고 있는지를 물어보는 코드이고 True 또는 False의 값을 반환해준다.

Map

key - value 페어가 굉장히 중요하다.
key라는 값으로 unique하게 보장이 되어야 함
Map 또한 HashMap, TreeMap으로 응용이 가능

HashMap: 중복을 허용하지 않고 순서를 보장X, 키와 값으로 null이 허용

TreeMap: key값을 기준으로 정렬할 수 있음. 단, 저장시 정렬(오름차순)을 하기 때문에 저장시간이 다소 오래 걸림

기능

선언: Map(String, Integer> intMap 형태로 key 타입과 Value타입을 지정해서 선언
생성: new HashMap<>(); 형태로 생성
추가: intMap.put({추가할 key값},{추가할 Value값}) 형태로 Key값에 Value값을 추가한다.
조회: intMap.get({조회할 Key값})형태로 Key에 있는 Value값을 조회한다.
전체key조회: intMap.keySet() 형태로 전체 key 값들을 조회
전체value조회: intMap.values() 형태로 value값들을 조회
삭제: intMap.remove({삭제할 Key값}) 형태로 key에 있는 value값을 삭제

Map의 Hashmap을 한 예제 실습

Key값 출력

출력값


향상된 for문으로 key값을 전체 출력했으나, "삼" 의 경우 총 3개로 중복되어있기에 1개만 출력되어 총 3개가 나온다. (Key값은 항상 unique하여야 함!)

이때 일 → 이 → 삼 순으로 나온 것은 map은 순서가 없는 key-value 쌍으로 이뤄진 데이터의 집합체기 때문에 이 → 일 → 삼 순으로 출력되었다.

value 값 출력

출력값
12
11
15

value는 위에 Map에서 String이 아닌 Integer이므로 for 문에서 Integer로 바꿔야 한다.

출력을 했을 때 12, 11 ,15가 나왔는데, key값 삼에 대한 값이 처음에 13이 나왔지만 동일 key값 삼의 14에 의해 14로 덮어지고 마찬가지로 key값 삼의 15에 의해 덮어진 최종 15값이 출력된다.

value 값 조회

출력값
15

key 값"삼"의 value 값 13이 중복되어 14로 덮어지고 다시 15로 덮어져서 최종 15가 출력된다.

profile
안녕하세요~

0개의 댓글