JAVA

컬렉션(List, Set, Queue, Map )

jki09871 2024. 7. 23. 15:00

자바에서 컬렉션은 데이터를 저장하고 관리하는 다양한 자료구조를 제공하는 라이브러리입니다. 자바 컬렉션 프레임워크는 데이터 구조를 추상화하고 다양한 알고리즘을 제공하여 데이터 처리와 조작을 효율적으로 수행할 수 있게 합니다. 주요 컬렉션 프레임워크의 구성 요소와 특징을 아래에 설명하겠습니다.

컬렉션 프레임워크의 주요 인터페이스

 

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