자바에서 컬렉션은 데이터를 저장하고 관리하는 다양한 자료구조를 제공하는 라이브러리입니다. 자바 컬렉션 프레임워크는 데이터 구조를 추상화하고 다양한 알고리즘을 제공하여 데이터 처리와 조작을 효율적으로 수행할 수 있게 합니다. 주요 컬렉션 프레임워크의 구성 요소와 특징을 아래에 설명하겠습니다.
컬렉션 프레임워크의 주요 인터페이스
Collection 인터페이스
- Collection은 자바 컬렉션 프레임워크의 루트 인터페이스로, 일반적인 컬렉션의 기본 메서드를 정의합니다.
- 직접 구현되지는 않지만, List, Set, Queue 인터페이스가 이를 상속받습니다.
List 인터페이스
- List는 순서가 있는 컬렉션으로, 중복된 요소를 허용합니다.
- 구현 클래스: ArrayList, LinkedList, Vector, Stack
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
Set 인터페이스
- Set은 중복된 요소를 허용하지 않는 컬렉션입니다.
- 구현 클래스: HashSet, LinkedHashSet, TreeSet
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
// 중복된 "Apple"은 추가되지 않음
Queue 인터페이스
- Queue는 FIFO(First-In-First-Out) 방식으로 요소를 처리하는 컬렉션입니다.
- 구현 클래스: LinkedList, PriorityQueue
Queue<String> queue = new LinkedList<>();
queue.add("Apple");
queue.add("Banana");
queue.add("Cherry");
Map 인터페이스
- Map은 키-값 쌍을 저장하는 컬렉션입니다. 키는 고유해야 하며, 값은 중복될 수 있습니다.
- 구현 클래스: HashMap, LinkedHashMap, TreeMap
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
컬렉션 프레임워크의 주요 클래스와 메서드
ArrayList
- 특징: 동적 배열 기반, 순서가 있음, 중복된 요소 허용
- 주요 메서드: add(), get(), remove(), size(), contains()
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
LinkedList
- 특징: 연결 리스트 기반, 삽입과 삭제가 빠름, 순서가 있음, 중복된 요소 허용
- 주요 메서드: add(), get(), remove(), size(), contains()
List<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
HashSet
- 특징: 해시 기반, 중복된 요소 허용하지 않음, 순서가 없음
- 주요 메서드: add(), remove(), size(), contains()
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
HashMap
- 특징: 해시 기반, 키-값 쌍 저장, 키는 유일해야 함, 순서 없음
- 주요 메서드: put(), get(), remove(), size(), containsKey(), containsValue()
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
컬렉션의 주요 메서드
1. add(): 요소를 추가합니다.
list.add("Apple");
set.add("Apple");
map.put("Apple", 1);
2. remove(): 요소를 제거합니다.
list.remove("Apple");
set.remove("Apple");
map.remove("Apple");
3. contains(): 요소가 존재하는지 확인합니다.
boolean exists = list.contains("Apple");
4. size(): 컬렉션의 크기를 반환합니다.
int size = list.size();
5. clear(): 모든 요소를 제거합니다.
list.clear();
6. iterator(): 컬렉션을 순회하기 위한 Iterator 객체를 반환합니다.
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
컬렉션 프레임워크의 유용성
- 유연성: 다양한 데이터 구조를 제공하여 적절한 자료구조를 선택할 수 있습니다.
- 효율성: 알고리즘과 데이터 구조를 최적화하여 성능을 개선할 수 있습니다.
- 표준화: 컬렉션 인터페이스와 구현체가 표준화되어 있어 코드의 일관성과 유지보수성이 향상됩니다.
자바 컬렉션 프레임워크는 다양한 상황에 적합한 데이터 구조와 알고리즘을 제공하여 개발자가 데이터 처리와 관리의 복잡성을 줄일 수 있도록 도와줍니다.
밑에는 코드는 컬렉션으로 게임을 만들어 봤습니다.
Scanner scanner = new Scanner(System.in);
Random random = new Random();
// 랜덤 숫자 생성 (1~100)
int targetNumber = random.nextInt(100) + 1;
List<Integer> attempts = new ArrayList<>();
System.out.println("1부터 100 사이의 숫자를 맞춰보세요!");
System.out.println("5번의 제한이 있습니다.");
int num = 5;
while (true) {
System.out.print("숫자를 입력하세요: ");
int userGuess = scanner.nextInt();
attempts.add(userGuess);
if (attempts.size() <= 4) {
if (userGuess < targetNumber) {
System.out.println("더 큰 숫자입니다.");
System.out.println("남은 횟수 :" + --num);
} else if (userGuess > targetNumber) {
System.out.println("더 작은 숫자입니다.");
System.out.println("남은 횟수 :" + --num);
} else {
System.out.println("정답입니다! 숫자는 " + targetNumber + "입니다.");
System.out.println("시도한 숫자들: " + attempts);
break;
}
}else {
break;
}
}
System.out.println("5번에 제한이 끝났습니다.");
scanner.close();
'JAVA' 카테고리의 다른 글
객체지향(지역 변수, 상수) (1) | 2024.07.24 |
---|---|
객체지향 프로그래밍 (클래스와 인스턴스)란? (0) | 2024.07.24 |
배열(Arrays) (0) | 2024.07.23 |
반복문 (Loops) (1) | 2024.07.23 |
조건문(Conditional Statements) (1) | 2024.07.23 |