-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
자료구조
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()
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels