Programming/Java

자바의 컬렉션 프레임워크

vita12321 2023. 8. 4. 12:03
728x90
반응형

자바의 컬렉션 프레임워크(Collection Framework) 프로그래밍에서 데이터를 관리하고 처리하는 필요한 기능을 제공하는 표준 인터페이스와 클래스들로 구성되어 있습니다. 글에서는 자바 컬렉션 프레임워크의 개념, 구조 구현 예제를 보다 상세하게 소개하겠습니다.


 

1. 자바 컬렉션 프레임워크의 개념 구조

 

자바 컬렉션 프레임워크는 인터페이스와 해당 인터페이스를 구현하는 클래스로 구성되어 있습니다. 주요 인터페이스는 다음과 같습니다.

 

  • Collection
    객체들의 모음인 컬렉션을 나타내는 최상위 인터페이스입니다. 이 인터페이스 아래에는 List, Set, Queue 등이 있습니다.

    - List: 순서가 유지되는 요소의 모음입니다. ArrayList, LinkedList 등이 구현합니다.

    - Set: 중복을 허용하지 않는 요소의 모음입니다. HashSet, TreeSet 등이 구현합니다.

    - Queue: 요소가 추가되거나 삭제될 특정 규칙에 따라 처리되는 자료구조입니다. PriorityQueue 등이 구현합니다.

 

  • Map
    키와 값의 쌍으로 이루어진 데이터의 모음인 맵을 나타내는 인터페이스입니다. HashMap, TreeMap 등이 구현합니다.

 

이러한 인터페이스들에 따라 구현되는 주요 클래스들에 대해 자세히 살펴보겠습니다.


 

2. 자바 컬렉션 프레임워크 구현 사용

 

  • ArrayList

 

  ArrayList List 인터페이스를 구현한 가변 크기의 배열입니다. 인덱스를 기반으로한 빠른 조회가 가능하나, 삽입 삭제의 빈도가 높으면 비효율적입니다.

 import java.util.ArrayList;

  import java.util.List;

 

  public class Main {

      public static void main(String[] args) {

          List<String> list = new ArrayList<>();

          list.add("Tom");

          list.add("Jerry");

          list.add("Spike");

 

          System.out.println(list.get(1)); // 출력: Jerry

          list.remove(1);

          System.out.println(list.size()); // 출력: 2

      }

  }

 

  • LinkedList

 

  LinkedList List 인터페이스를 구현한 이중 연결리스트입니다. 데이터 삽입 삭제가 빈번한 경우에 성능이 좋지만 인덱스 기반 조회에서는 비효율적입니다.

  import java.util.LinkedList;

  import java.util.List;

 

  public class Main {

      public static void main(String[] args) {

          List<String> list = new LinkedList<>();

          list.add("Tom");

          list.add("Jerry");

          list.add("Spike");

 

          System.out.println(list.get(1)); // 출력: Jerry

          list.remove(1);

          System.out.println(list.size()); // 출력: 2

      }

  }

 

  • HashSet

 

  HashSet Set 인터페이스를 구현한 자료구조로, 중복을 허용하지 않는 데이터들의 집합입니다. 내부적으로 HashMap 사용하여 데이터를 저장합니다.

  import java.util.HashSet;

  import java.util.Set;

 

  public class Main {

      public static void main(String[] args) {

          Set<String> set = new HashSet<>();

          set.add("Tom");

          set.add("Jerry");

          set.add("Tom");

 

          System.out.println(set.size()); // 출력: 2

      }

  }

 

  • TreeSet

 

  TreeSet Set 인터페이스를 구현한 정렬된 데이터 집합입니다. 트리 구조로 데이터를 저장하고 순서를 유지하며, 중복을 허용하지 않습니다.

 

  import java.util.Set;

  import java.util.TreeSet;

 

  public class Main {

      public static void main(String[] args) {

          Set<String> set = new TreeSet<>();

          set.add("Tom");

          set.add("Jerry");

          set.add("Spike");

 

          for (String s : set) {

              System.out.println(s);

          }

          // 출력: Jerry

          // 출력: Spike

          // 출력: Tom

      }

  }

 

  • PriorityQueue

 

  PriorityQueue Queue 인터페이스를 구현한 클래스로, 우선순위 큐를 제공합니다. 내부적으로 자료구조를 사용하여 우선순위에 따라 정렬됩니다.

  import java.util.PriorityQueue;

  import java.util.Queue;

 

  public class Main {

      public static void main(String[] args) {

          Queue<Integer> queue = new PriorityQueue<>();

          queue.offer(3);

          queue.offer(1);

          queue.offer(2);

 

          while (!queue.isEmpty()) {

              System.out.println(queue.poll()); // 출력: 1, 2, 3

          }

      }

  }

 

  • HashMap

 

  HashMap Map 인터페이스를 구현한 클래스로, 키와 값의 쌍을 저장하는 데이터 구조입니다. 순서를 유지하지 않으며 null 값도 허용합니다.

  import java.util.HashMap;

  import java.util.Map;

 

  public class Main {

      public static void main(String[] args) {

          Map<String, Integer> map = new HashMap<>();

          map.put("Tom", 90);

          map.put("Jerry", 80);

          map.put("Spike", 70);

 

          System.out.println(map.get("Jerry")); // 출력: 80

      }

  }

 

  • TreeMap

 

  TreeMap Map 인터페이스를 구현한 클래스로, 키와 값의 쌍을 저장하는 정렬된 데이터 구조입니다. 내부적으로 레드-블랙 트리를 사용합니다.

  import java.util.Map;

  import java.util.TreeMap;

 

  public class Main {

      public static void main(String[] args) {

          Map<String, Integer> map = new TreeMap<>();

          map.put("Tom", 90);

          map.put("Jerry", 80);

          map.put("Spike", 70);

 

          for (Map.Entry<String, Integer> entry : map.entrySet()) {

              System.out.println(entry.getKey() + ": " + entry.getValue());

          }

          // 출력: Jerry: 80

          // 출력: Spike: 70

          // 출력: Tom: 90

      }

  }

 

 

자바의 컬렉션 프레임워크를 알고 활용하면 효율적인 프로그래밍이 가능합니다. 상황과 요구사항에 맞게 적합한 컬렉션 자료구조를 사용하여 프로그램의 성능을 최적화할 있으며, 자료구조를 통합적으로 다루는 인터페이스를 사용해서 유연한 프로그램 설계가 가능합니다.

728x90
반응형