자료구조
indexOf() 메소드
-
indexOf(String str)
- 설명: 주어진 문자열
str이 원본 문자열에서 처음 발견되는 인덱스를 반환합니다. 만약 찾지 못하면 -1을 반환
- 예시:
String test = "Hello World";
int index = test.indexOf("World"); // index는 6
-
indexOf(String str, int fromIndex)
- 설명: 인자로 전달된 인덱스
fromIndex부터 시작하여 str을 찾습니다. 이 메소드는 fromIndex의 위치에서 시작하여 문자열을 검색
- 예시:
String test = "Hello World";
int index = test.indexOf("o", 5); // index는 7 (5번 인덱스부터 'o'를 찾음)
-
indexOf(int ch)
- 설명: 인자로 전달된 아스키 값
ch를 문자열에서 찾아 그 인덱스를 반환합니다. 아스키 값이란 특정 문자를 나타내는 숫자
- 예시:
String test = "Hello World";
int index = test.indexOf('o'); // index는 4
-
indexOf(int ch, int fromIndex)
- 설명: 특정 아스키 값
ch를 fromIndex에서 시작하여 찾음.
- 예시:
String test = "Hello World";
int index = test.indexOf('o', 5); // index는 7 (5번 인덱스부터 'o'를 찾음)
lastIndexOf() 메소드
-
lastIndexOf(String str)
- 설명: 주어진 문자열
str이 원본 문자열에서 마지막으로 발견되는 인덱스를 반환. 찾지 못하면 -1을 반환
- 예시:
String test = "Hello World World";
int index = test.lastIndexOf("World"); // index는 12
-
lastIndexOf(String str, int fromIndex)
- 설명: 인자로 제공된 인덱스
fromIndex부터 시작하여 문자열을 뒤에서부터 검색
- 즉,
fromIndex에서 시작해 그 인덱스 이전의 문자열을 검색
- 예시:
String test = "Hello World";
int index = test.lastIndexOf("o", 5); // index는 4 (5번 인덱스 이전에서 'o'를 찾음)
-
lastIndexOf(int ch)
- 설명: 아스키 값
ch를 문자열에서 뒤쪽 방향으로 찾아 그 인덱스를 반환. 찾지 못하면 -1을 반환.
- 예시:
String test = "Hello World";
int index = test.lastIndexOf('o'); // index는 7
-
lastIndexOf(int ch, int fromIndex)
- 설명: 특정 아스키 값
ch를 fromIndex에서 시작하여 뒤쪽으로 검색.
- 예시:
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() 값이 같은 객체가 존재할 수 있음.
해쉬 충돌 해결 방법
-
Separate Chaining: 같은 hashCode를 갖는 객체들을 리스트로 연결하여 저장.
- 예시: A와 B의 hashCode가 10일 경우, 해당 버켓에 접근하여 리스트에서 B 찾음.
- 단점: 추가적인 외부 공간이 필요하다. 최근에는 링크드 리스트 대신 트리 자료구조를 활용하여 효율성을 높임.
-
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()
자료구조
indexOf()메소드indexOf(String str)str이 원본 문자열에서 처음 발견되는 인덱스를 반환합니다. 만약 찾지 못하면 -1을 반환indexOf(String str, int fromIndex)fromIndex부터 시작하여str을 찾습니다. 이 메소드는fromIndex의 위치에서 시작하여 문자열을 검색indexOf(int ch)ch를 문자열에서 찾아 그 인덱스를 반환합니다. 아스키 값이란 특정 문자를 나타내는 숫자indexOf(int ch, int fromIndex)ch를fromIndex에서 시작하여 찾음.lastIndexOf()메소드lastIndexOf(String str)str이 원본 문자열에서 마지막으로 발견되는 인덱스를 반환. 찾지 못하면 -1을 반환lastIndexOf(String str, int fromIndex)fromIndex부터 시작하여 문자열을 뒤에서부터 검색fromIndex에서 시작해 그 인덱스 이전의 문자열을 검색lastIndexOf(int ch)ch를 문자열에서 뒤쪽 방향으로 찾아 그 인덱스를 반환. 찾지 못하면 -1을 반환.lastIndexOf(int ch, int fromIndex)ch를fromIndex에서 시작하여 뒤쪽으로 검색.요약
indexOf()는 문자열의 처음부터 특정 문자열이나 아스키 값을 검색하여 인덱스를 반환.lastIndexOf()는 문자열의 끝에서부터 특정 문자열이나 아스키 값을 검색하여 인덱스를 반환.fromIndex를 사용하여 검색 시작 위치를 지정할 수 있음.Set의 사용 이유 및 특징
Set의 정의
Set은 중복된 원소를 갖지 않는 데이터 구조.
특징
Set<Integer> set = new HashSet<>();HashSet 생성자
HashSet(): 새로운 빈 Set을 생성하는 생성자이다. 내부적으로 HashMap을 사용하며, 기본 capacity는 16, load factor는 0.75.HashSet(Collection<? extends E> c): 다른 컬렉션을 인자로 받아 새로운 Set을 생성할 수 있음.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의 해쉬 충돌
해쉬 충돌 해결 방법
Separate Chaining: 같은 hashCode를 갖는 객체들을 리스트로 연결하여 저장.
Open Addressing: 삽입하려는 객체의 hashCode의 저장공간에 이미 다른 객체가 저장되어 있을 경우, 그 다음 공간에 저장
자료구조
스택 (Stack)
개념
자바에서의 사용
Stack클래스 또는Deque인터페이스를 구현한ArrayDeque클래스를 사용하여 구현.예제 코드
큐 (Queue)
개념
자바에서의 사용
예제 코드
요약