Java 3-3 : 컬렉션(Collection)

토스트빌런·2025년 3월 14일

컬렉션(Collection)이란?

📚컬렉션(Collection) 이 무엇인지 학습해 봅시다.

https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html

  • 프로그래밍 세계에는 다양한 자료구조가 존재합니다.
  • 자바 컬렉션 프레임워크는 이러한 자료구조들을 쉽게 사용할 수 있도록 인터페이스와 구현체(ArrayList, HashSet, HashMap 등)를 제공하는 집합입니다.
  • 컬렉션을 통해 데이터 저장, 조회, 삭제, 정렬 등 다양한 기능을 간편하게 구현할 수 있습니다.
  • 배열과 다르게 컬렉션은 길이를 동적으로 변경할 수 있습니다.(추가 삭제 시 유연하게 길이가 변경됩니다.)

배열의 한계

📚배열의 한계에 대해서 학습해 봅시다.

  • 배열은 크기가 고정되어 있어서 한 번 설정하면 길이를 변경할 수 없습니다.
    배열의 길이 초과 시 에러가 발생합니다.
  • 자바에서는 다양한 컬렉션 클래스(ArrayList, HashSet, HashMap 등)를 제공합니다.
  • 컬렉션 객체를 활용해 데이터들을 저장하고 관리할 수 있습니다.
// 배열은 길이가 고정됨
int[] numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40; // ❌ 요소 추가시 에러발생

💡선언 방법

컬렉션객체<자료형> 변수이름 = new 컬렉션객체<자료형>();

// 객체<다룰 데이터: 정수> 변수이름 = new 컬렉션객체생성자<정수>();
ArrayList<Integer> arrayList = new ArrayList<Integer>();
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(10);
arrayList.add(20);
arrayList.add(30);
arrayList.add(40); // ✅ 정상 동작 (길이 제한 없음)
  • 배열과 다르게 컬렉션은 길이를 동적으로 변경할 수 있습니다.(추가 삭제 시 유연하게 길이가 변경됩니다.)

컬렉션 종류와 특징

📚오늘 학습할 컬렉션의 종류와 특징에 대해서 살펴봅시다.

인터페이스특징구현체
List순서 유지, 중복 허용ArrayList
Set순서 없음, 중복 불가HashSet
Map키-값 구조, 키 중복 불가HashMap

List 인터페이스를 구현한 ArrayList

📚List 인터페이스를 구현한 ArrayList 를 활용해 봅시다.

  • ArrayList 는 요소의 순서를 유지하고 중복된 값을 저장할 수 있는 자료구조입니다.
  • 요소 추가 → add("값")
  • 요소 조회 → get(인덱스)
  • 요소 제거 → remove("값")
  • 대표적인 구현체로는 ArrayList , LinkedList가 있습니다.
    // List 를 구현한 ArrayList
    ArrayList<String> names = new ArrayList<>();
    names.add("Spartan");      // 1 번째 요소 추가
    names.add("Steve");        // 2 번째 요소 추가
    names.add("Isac");         // 3 번째 요소 추가
    names.add("1");
    names.add("2");
    
     // ✅ 순서 보장
    System.out.println("names = " + names);
    
    // ✅ 중복 데이터 허용
    names.add("Spartan");
    System.out.println("names = " + names);
    
    // ✅ 단건 조회
    System.out.println("1 번째 요소 조회: " + names.get(0)); // 조회 Spartan
    
    // ✅ 데이터 삭제
    names.remove("Steve"); 
    System.out.println("names = " + names);
    

Set 인터페이스를 구현한 HashSet

📚Set 인터페이스를 구현한 HashSet 을 활용해 봅시다.

  • HashSet순서를 유지하지 않고 중복을 허용하지 않습니다. → 순서를 보장하지 않기 때문에 get() 지원을 하지 않습니다.
  • 요소 추가 → add("값")
  • 요소 제거 → remove("값")
  • 대표적인 구현체로는 HashSet , TreeSet 이 있습니다.
    // Set 을 구현한 HashSet
    HashSet<String> uniqueNames = new HashSet<>();
    
    // ✅ 추가
    uniqueNames.add("Spartan");
    uniqueNames.add("Steve");
    uniqueNames.add("Isac");
    uniqueNames.add("1");
    uniqueNames.add("2");
    
    // ⚠️ 순서를 보장 안함
    System.out.println("uniqueNames = " + uniqueNames); 
    uniqueNames.get(0); // ❌ get 사용 불가
    
    // ⚠️ 중복 불가
    uniqueNames.add("Spartan");
    System.out.println("uniqueNames = " + uniqueNames); 
    
    // ✅ 제거
    uniqueNames.remove("Spartan");
    System.out.println("uniqueNames = " + uniqueNames); 

Map 인터페이스를 구현한 HashMap

📚Map 인터페이스를 구현한 HashMap 을 활용해 봅시다.

  • HashMap키(Key) - 값(Value) 구조로 데이터를 저장합니다.(키: 값)
  • 키(Key) 는 중복될 수 없지만 값(Value) 은 중복 가능합니다.
  • 순서를 보장하지 않습니다.
  • 요소 추가 → put(”키”, 값)
  • 요소 조회 → get(”키”)
  • 요소 제거 → remove("Steve")
  • 키 확인 → keySet()
  • 값 확인 → values()
  • 대표적인 구현체로는 HashMap, TreeMap 이 있습니다.
    // Map 을 구현한 HashMap
    HashMap<String, Integer> memberMap = new HashMap<>();
    
    // ✅ 추가
    memberMap.put("Spartan", 15);
    memberMap.put("Steve", 15); // ✅ 값은 중복 가능
    memberMap.put("Isac", 1);
    memberMap.put("John", 2);
    memberMap.put("Alice", 3);
    
    // ⚠️ 순서 보장 안함 
    System.out.println("memberMap = " + memberMap);
    
    // ⚠️ 키 중복 불가: 값 덮어쓰기 발생
    memberMap.put("Alice", 5);
    System.out.println("memberMap = " + memberMap);
    
    // ✅ 조회: 15
    System.out.println(memberMap.get("Steve"));
    
    // ✅ 삭제 가능
    memberMap.remove("Spartan"); 
    System.out.println("memberMap = " + memberMap);
    
    // ✅ 키 확인
    Set<String> keys = memberMap.keySet();
    System.out.println("keys = " + keys);
    
    // ✅ 값 확인
    Collection<Integer> values = memberMap.values();
    System.out.println("values = " + values);

0개의 댓글