Skip to content

java_08 공부 정리 #16

@Sam1000won

Description

@Sam1000won

자료구조


indexOf() 메소드

  1. indexOf(String str)

    • 설명: 주어진 문자열 str이 원본 문자열에서 처음 발견되는 인덱스를 반환합니다. 만약 찾지 못하면 -1을 반환
    • 예시:
      String test = "Hello World";
      int index = test.indexOf("World"); // index는 6
  2. indexOf(String str, int fromIndex)

    • 설명: 인자로 전달된 인덱스 fromIndex부터 시작하여 str을 찾습니다. 이 메소드는 fromIndex의 위치에서 시작하여 문자열을 검색
    • 예시:
      String test = "Hello World";
      int index = test.indexOf("o", 5); // index는 7 (5번 인덱스부터 'o'를 찾음)
  3. indexOf(int ch)

    • 설명: 인자로 전달된 아스키 값 ch를 문자열에서 찾아 그 인덱스를 반환합니다. 아스키 값이란 특정 문자를 나타내는 숫자
    • 예시:
      String test = "Hello World";
      int index = test.indexOf('o'); // index는 4
  4. indexOf(int ch, int fromIndex)

    • 설명: 특정 아스키 값 chfromIndex에서 시작하여 찾음.
    • 예시:
      String test = "Hello World";
      int index = test.indexOf('o', 5); // index는 7 (5번 인덱스부터 'o'를 찾음)

lastIndexOf() 메소드

  1. lastIndexOf(String str)

    • 설명: 주어진 문자열 str이 원본 문자열에서 마지막으로 발견되는 인덱스를 반환. 찾지 못하면 -1을 반환
    • 예시:
      String test = "Hello World World";
      int index = test.lastIndexOf("World"); // index는 12
  2. lastIndexOf(String str, int fromIndex)

    • 설명: 인자로 제공된 인덱스 fromIndex부터 시작하여 문자열을 뒤에서부터 검색
    • 즉, fromIndex에서 시작해 그 인덱스 이전의 문자열을 검색
    • 예시:
      String test = "Hello World";
      int index = test.lastIndexOf("o", 5); // index는 4 (5번 인덱스 이전에서 'o'를 찾음)
  3. lastIndexOf(int ch)

    • 설명: 아스키 값 ch를 문자열에서 뒤쪽 방향으로 찾아 그 인덱스를 반환. 찾지 못하면 -1을 반환.
    • 예시:
      String test = "Hello World";
      int index = test.lastIndexOf('o'); // index는 7
  4. lastIndexOf(int ch, int fromIndex)

    • 설명: 특정 아스키 값 chfromIndex에서 시작하여 뒤쪽으로 검색.
    • 예시:
      String test = "Hello World";
      int index = test.lastIndexOf('o', 5); // index는 4 (5번 인덱스 이전에서 'o'를 찾음)

요약

  • indexOf()는 문자열의 처음부터 특정 문자열이나 아스키 값을 검색하여 인덱스를 반환.
  • lastIndexOf()는 문자열의 끝에서부터 특정 문자열이나 아스키 값을 검색하여 인덱스를 반환.
  • 두 메소드 모두 문자열이 발견되지 않으면 -1을 반환.
  • fromIndex를 사용하여 검색 시작 위치를 지정할 수 있음.

Set의 사용 이유 및 특징

Set의 정의

Set은 중복된 원소를 갖지 않는 데이터 구조.

특징

  • 중복 제거: Set은 중복된 원소를 허용하지 않기 때문에, 중복을 제거해야 하는 상황에서 유용.
  • 순서 없음: Set은 특정한 순서를 가지고 있지 않다. 따라서 원소의 순서가 중요하지 않은 경우에 적합.
  • Set의 구현체: Set은 인터페이스로, 이를 구현한 다양한 클래스가 존재.
  • HashSet 생성: HashSet을 통해 Set 객체를 생성할 수 있음.
    • 예시: Set<Integer> set = new HashSet<>();
  • 다양한 구현체: HashSet 외에도 LinkedHashSet, TreeSet 등 다양한 구현체가 존재.

HashSet 생성자

  • HashSet(): 새로운 빈 Set을 생성하는 생성자이다. 내부적으로 HashMap을 사용하며, 기본 capacity는 16, load factor는 0.75.
  • HashSet(Collection<? extends E> c): 다른 컬렉션을 인자로 받아 새로운 Set을 생성할 수 있음.
    • 예시:
      List<Integer> list = new ArrayList<>(List.of(1, 2, 3));
      Set<Integer> set = new HashSet<>(list);
  • HashSet(int initialCapacity): 초기 용량을 설정하여 새로운 빈 Set을 생성.
  • HashSet(int initialCapacity, float loadFactor): 초기 용량과 load factor를 설정하여 새로운 빈 Set을 생성.

HashSet의 기능

  • add(E e): Set에 원소를 삽입하는 기능이다. 이미 존재하는 원소를 삽입하려고 하면 false를 반환하고 아무 일도 일어나지 않음.
  • addAll(Collection<? extends E> c): 인자로 받은 컬렉션의 원소들을 Set에 추가하는 기능.
  • contains(Object o): 특정 원소가 Set에 존재하는지 확인하는 기능이다. 존재하면 true, 존재하지 않으면 false를 반환.
  • isEmpty(): Set이 빈 상태인지 확인하는 기능이다. 원소가 없으면 true를 반환.
  • remove(Object o): Set에서 특정 원소를 제거하는 기능이다. 제거 성공 시 true, 실패 시 false를 반환.
  • size(): Set에 들어있는 원소의 수를 반환하는 기능.

HashSet의 해쉬 충돌

  • 해쉬 충돌 정의: 객체를 저장할 때 hashCode() 값이 같은 객체가 존재할 수 있음.

해쉬 충돌 해결 방법

  1. Separate Chaining: 같은 hashCode를 갖는 객체들을 리스트로 연결하여 저장.

    • 예시: A와 B의 hashCode가 10일 경우, 해당 버켓에 접근하여 리스트에서 B 찾음.
    • 단점: 추가적인 외부 공간이 필요하다. 최근에는 링크드 리스트 대신 트리 자료구조를 활용하여 효율성을 높임.
  2. Open Addressing: 삽입하려는 객체의 hashCode의 저장공간에 이미 다른 객체가 저장되어 있을 경우, 그 다음 공간에 저장

    • 장점: 외부 저장공간이 필요 없고, cache 효율이 높다. 데이터 저장/조회 시 Linear Probing 같은 방법.

자료구조

스택 (Stack)

개념

  • 스택은 LIFO(Last In, First Out) 구조입.
  • 가장 나중에 들어온 데이터가 가장 먼저 나감.
  • 예: 책을 쌓아 놓으면, 가장 위에 있는 책이 먼저 꺼내짐.

자바에서의 사용

  • Stack 클래스 또는 Deque 인터페이스를 구현한 ArrayDeque 클래스를 사용하여 구현.

예제 코드

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();

        // 스택에 요소 추가
        stack.push("A");
        stack.push("B");
        stack.push("C");

        System.out.println("스택: " + stack);

        // 스택의 가장 위 요소 확인
        String topElement = stack.peek();
        System.out.println("가장 위의 요소: " + topElement);

        // 스택에서 요소 제거
        String removedElement = stack.pop();
        System.out.println("제거된 요소: " + removedElement);
        System.out.println("스택: " + stack);
    }
}

큐 (Queue)

개념

  • 는 FIFO(First In, First Out) 구조.
  • 가장 먼저 들어온 데이터가 가장 먼저 나감.
  • 예: 줄을 서 있는 사람들처럼, 가장 먼저 줄에 서 있는 사람이 먼저 서비스를 받음.

자바에서의 사용

  • Queue 인터페이스를 사용하며, LinkedList 또는 PriorityQueue 클래스를 통해 구현할 수 있음.

예제 코드

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();

        // 큐에 요소 추가
        queue.add("A");
        queue.add("B");
        queue.add("C");

        System.out.println("큐: " + queue);

        // 큐의 가장 앞 요소 확인
        String frontElement = queue.peek();
        System.out.println("가장 앞의 요소: " + frontElement);

        // 큐에서 요소 제거
        String removedElement = queue.poll();
        System.out.println("제거된 요소: " + removedElement);
        System.out.println("큐: " + queue);
    }
}

요약

  • 스택:
  • 구조: LIFO
  • 사용 메소드: push(), pop(), peek()

  • 큐:
  • 구조: FIFO
  • 사용 메소드: add(), poll(), peek()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions