Java : 컬렉션 실습(Stack, Queue, Set, Map)

커비·2024년 11월 13일
0

Java

목록 보기
34/55

📌 Stack

  • 수직으로 값을 쌓아놓고 넣었다가 뺀다. FILO(Basket)
  • push, peek, pop
  • 최근 저장된 데이터를 나열하고 싶거나, 데이터의 중복처리를 막고 싶을 때 사용

📍 .pop(), .isEmpty()

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

intStack.push(10);
intStack.push(15);
intStack.push(1);
        
// 다 지워질 때까지 출력
while(!intStack.isEmpty()){
	System.out.println(intStack.pop());
}

.isEmpty()

: 비어있는지 확인
: 비어있으면 True 출력
: 안비어있으면 False 출력
: while(!intStack.isEmpty()) : isEmpty가 아닐 때 돌아
: while(intStack.isEmpty()) : isEmpty일 때 돌아

.pop()

: 맨 상단에 있는 것만 빼줌 (Stack에서 빠지게 됨)

✅ 내가 기억해야할 포인트

! + .isEmpty() + .pop()

어느정도 맥락은 이해했는데 뭔가 상당히 재미있는 코드 같다.


📍 .peek(), .size()

Stack<Integer> intStack = new Stack<Integer>();
// 다시 추가
intStack.push(10);
intStack.push(15);
intStack.push(1);

// peak(조회)
System.out.println(intStack.peek());
System.out.println(intStack.size());

.peek()

: 맨 상단에 있는 것이 무엇인지 출력

.size()

: 길이를 구함


📌 Queue

  • FIFO (먼저 들어간게 먼저 나오는 구조)
  • add, peek, poll
  • 생성자가 없는 인터페이스
    (new 키워드로 만들 수 없음 => new 키워드로 만들 수 있는 것은 생성자가 있는 인터페이스)

📍 .peek(), .poll()

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

        intQueue.add(1);
        intQueue.add(5);
        intQueue.add(9);

        while (!intQueue.isEmpty()) {
            System.out.println(intQueue.poll());
        }

        // 다시 추가
        intQueue.add(1);
        intQueue.add(5);
        intQueue.add(9);

        // peek
        System.out.println(intQueue.peek());
        System.out.println(intQueue.size());

.peek()

: 맨 상단에 있는 것이 무엇인지 출력

.poll()

: 처음에 add된 것부터 빼주는 것


Set

  • Set(집합) : 순서 없고 중복 없음
  • 순서가 보장되지 않는 대신 중복을 허용하지 않도록 하는 프로그램에서 사용할 수 있는 자료구조
  • Set -> 그냥 쓸 수도 있음. 그러나 HashSet, TreeSet 등으로 응용해서 같이 사용 가능
  • Set은 생성자가 없는 껍데기라서 바로 생성할 수 없음
  • 이번 주차에서는 생성자가 존재하는 HashSet을 이용해서 -> Set을 구현해볼 수 있음

.contains()

// 선언 + 생성
Set<Integer> intSet = new HashSet<>();

intSet.add(1);
intSet.add(12);
intSet.add(5);
intSet.add(9);
intSet.add(12);

for (Integer value : intSet) {
	System.out.println(value);
}

// contains (포함하고 있는지)
System.out.println(intSet.contains(2));
System.out.println(intSet.contains(5));

.contains()

: 포함하고 있는지 확인 후 true, false 출력


Map

  • key - value pair -> 중요!
  • key라는 값으로 unique하게 보장이 되어야 함!
  • Map -> HashMap, TreeMap으로 응용
Map<String, Integer> intMap = new HashMap<>();

// 키 + 값
intMap.put("일", 11);
intMap.put("이", 12);
intMap.put("삼", 13);
intMap.put("삼", 14); // 중복된 key
intMap.put("삼", 15); // 중복된 key

// key 값 전체 출력(향상된 for문)
for (String key : intMap.keySet()) {
	System.out.println(key);
}

  • 중복된 Key는 삭제됨

이 때, Value값을 확인하면?

Map<String, Integer> intMap = new HashMap<>();

// 키 + 값
intMap.put("일", 11);
intMap.put("이", 12);
intMap.put("삼", 13);
intMap.put("삼", 14); // 중복된 key
intMap.put("삼", 15); // 중복된 key

// value 값 전체 출력(향상된 for문)
for (Integer value : intMap.values()) {
	System.out.println(value);
}

  • 중복되는 Key 중 맨 위의 것인 13이 없어짐
  • 마지막에 쓴 값으로 덮어쓰기

Map<String, Integer> intMap = new HashMap<>();

        // 키 + 값
        intMap.put("일", 11);
        intMap.put("이", 12);
        intMap.put("삼", 13);
        intMap.put("삼", 14);
        intMap.put("삼", 15);

        // key 값 전체 출력(향상된 for문)
        for (String key : intMap.keySet()) {
            System.out.println(key);
        }

        // value 값 전체 출력(향상된 for문)
        for (Integer value : intMap.values()) {
            System.out.println(value);
        }

        // "삼"이라는 Key를 가진 Value를 가져오게 됨
        System.out.println(intMap.get("삼"));
    }
profile
전공은 컴퓨터공학, 복수전공은 해킹보안학, 직장은 방학(파워 구직중)

0개의 댓글