[Java] 컬렉션 자료구조

2025. 4. 30. 10:46Java

컬렉션 프레임워크

주요 인터페이스 간의 상속 관계
img

  • 컬렉션 프레임워크 → Collection 인터페이스, Map 인터페이스

 

  • List
  • Set
    • HashSet : 동등 객체를 저장하지 않음, hashCode() 리턴 값이 같아도 동일한 객체로 판단해 저장하지 않음
    • TreeSet : 이진 트리를 기반으로 한 Set 컬렉션
  • Map :
    • 키는 중복 저장할 수 없지만, 값은 중복 저장할 수 있음.
    • 기존의 저장된 키와 동일된 키로 값을 저장하면 새로운 값으로 대치
    • HashMap : hashCode() 리턴 값이 같으면 동일 키로 보고 중복 저장을 허용하지 않음
    • HashTable
      • 동기화된 메소드로 구성돼, 멀티 스레드가 동시에 Hashtable의 메소드들을 실행 불가.
      • 멀티 스레드 환경에서도 안전하게 객체를 추가, 삭제할 수 있다.
      • 자식 클래스로 키와 값을 String 타입으로 제한한 Properties가 있다.
    • TreeMap

 

Comparable과 Comparator

  • TreeSet에 저장되는 객체와 TreeMap에 저장되는 키 객체를 정렬
  • Comparable 인터페이스에서 정의된 compareTo()를 재정의해서 비교 결과를 정수 값으로 리턴
public class Person implements Comparable<Person> { 
    public String name; 
    public int age; 
    public Person(String name, int age) { 
        this.name = name; 
        this.age = age; } 

    @Override 
    public int compareTo(Person o) { 
        if(age < o.age) return -1; 
        else if(age == o.age) return 0; 
        else return 1; } 
}
  • 비교 기능이 없는 Comparable 비구현 객체를 저장하려면 비교자 Comparator를 제공
  • 비교자는 compare() 메소드를 재정의해서 비교 결과를 정수 값으로 리턴

 

LIFO, FIFO (Stack, Queue)

img

동기화된 컬렉션

  • 동기화된 메소드로 구성된 Vector와 Hashtable은 멀티 스레드 환경에서 안전하게 요소를 처리
  • Collections의 synchronizedXXX() 메소드: 동기화된 메소드로 래핑
    List<T> list = Collections.synchronizedList(new ArrayList<T>());

 

수정할 수 없는 컬렉션

  • 저장된 요소를 변경하고 싶지 않을 때 사용
// List 불변 컬렉션 생성
List<String> immutableList1 = List.of("A", "B", "C");

List<String> list = new ArrayList< >(); 
list.add("A"); 
list.add("B"); 
list.add("C");

// copyOf() 를 이용해 기존 컬렉션을 복사
List<String> immutableList2 = List.copyOf(list);

참고자료

'Java' 카테고리의 다른 글

[Java] 람다식  (1) 2025.05.07
[Java] Multi Thread  (1) 2025.04.29
[Java] 제네릭  (0) 2025.04.29
[Java] 인터페이스  (1) 2025.04.21
[Java] 상속  (1) 2025.04.17