프로그래밍/JAVA

Collection 자료구조

hwangsehee 2025. 2. 15. 20:32

 

👨🏿‍💻 정의 : 데이터를 효율적으로 저장, 관리, 조작하기 위한 표준화된 API 모음입니다.

 

핵심 개념

  • Collection 인터페이스를 기반으로 다양한 자료구조(List, Set, Queue) 제공
  • Map은 Collection의 하위 타입이 아니지만 함께 사용됨
  • Generics(제네릭) 사용 가능 → 타입 안정성 제공
  • 중복 허용 여부, 정렬 방식, 순서 유지 여부에 따라 다양한 구현체 제공

Collection 계층 구조 

 

Collection

  • List
    • ArrayList
      • Vector 
        • Stack
    • LinkedList
  • Set
    • HashSet
      • LinkedHashSet
    • TreeSet

Map 

  • HashMap
    • LinkedHashMap
  • TreeMap
    • ConcurrentHashMap

  List (순서 보장, 중복허용) 

구현체 특징
ArrayList 배열기반, 조회 속도 빠름 (O(1)) , 삽입.삭제 느림(O(n))
LinkedList 연결 리스트 기반, 삽입.삭제.빠름 (O(1)) , 조회 느림(O(n))
Vector ArrayList 와 유사하지만 동기화(Synchronized) 지원
Stack LIFO(Last In, Frist Out) 구조

 

  Set(중복 허용 x , 순서 보장 x)

구현체 특징
HashSet 순서 없음, 중복 제거 , 빠른 조회(O(1))
LinkedHashSet 입력 순서 유지
TreeSet 자동 정렬(오름차순) , Comparable 또는 Comparator 필요

 

  Queue(FIFO x , 순서 유지)

구현체 특징
LinkedList FIFO, 삽입.삭제 빠름
PriorityQueue 우선순위 큐 (낮은 값부터 처리됨), 정렬된 방식으로 요소 관리
ArrayDeque 양방향 큐(Deque) , Stack 대체 가능 

 

  Map(키-값 저장, 키 중복 불가) 

구현체 특징
HashMap 순서 없음, 빠른 검색(O(1)), null 키 허용
LinkedHashMap 입력 순서 유지 
TreeMap 자동 정렬(오름차순)
ConcurrentHashMap 멀티스레드 환경에서 동기화 지원

 


📌  컬렉션 변환 

1. 배열 <-> List 변환 

String [] array = {"a", "b" ,"c"};
List<String> list = Arrays.asList(array); 

String[] newArrays = list.toArray(new String[0]);
  • Arrays.asList() 는 고정길이의 list를 return 한다. 
  • 따라서 Arrays.asList()를 사용해서 배열을 List 로 변환 한 후 , List의 크기를 변경하는 작업은 불가능하다. 
  • .add() , .remove() 사용 불가 
  • .set() 으로 수정은 가능 
  • 크기 변경작업은 new ArrayList<>(Arrays.asList(array)); 로 ArrayList로 감싸서 사용 가능

2. List <-> Set 변환

List<String> list = new ArrayList<>(set); 
Set<String> set = new HashSet<>(list);

 

3. Map <-> List 변환

Map<String, Integer> map = new HashMap<>(); 
map.put("A" ,1); 
map.put("B" ,2); 

List<String> keys = new ArraysList<>(map.keySet()); 
List<Integer> values = new ArrayList<>(map.values());

 

Map<String,Integer> map = new HashMap<>(); 
map.put("first" , 1);
map.put("second", 2); 

List<Map.Entry<String,Integer> list = map.entrySet()
										.stream()
                                        .collect(Collectors.toList());

 

+) map.entrySet() 사용법 : 맵의 키-값을 Set 형태로 변환하여 맵의 모든 항복을 쉽게 반복하거나 수정할 수 있음 

for(Map.Entry<String,Intger> entry : map.entrySet()){
	if(entry.getKey().equals("first"){
    	entry.setValue(10);
    }
}