ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컬렉션
    언어/JAVA 2023. 7. 9. 18:05

     

    1. 컬렉션 프레임워크

     

     - 자바는 널리 알려 있는 자료구조를 바탕으로 객체들을 효율적으로 다룰 수 있는 인터페이스와 클래스를 미리 util패키지에 포함시켜둠 (이런 것들을 컬렉션 프레임워크라함)

     

    - 컬렉션 프레임워크는 몇 가지 인터페이스를 통해 다양한 컬렉션 클래스를 사용할 수 있도록 설계됨 

    - 주요 인터페이스는 List,Set,Map이 있다. 

    - 각 인터페이스로 사용가능한 클래스 종류는 아래와 같다.

     

    - List와 Set는 추가,삭제,검색 방법에 공통점이 있어서 Collection인터페이스를 따로 정의해 두고 상속받는다.

    - Map은 키와 값을 쌍으로 묶어서 관리하는 구조이므로, List와 Set가 다름

     

    2. List 컬렉션 (순서유지, 중복저장)

     

    - List는 객체를 인덱스로 관리,인덱스를 통해 검색,삭제 기능을 제공한다.

    - List 컬렉션에서 공통적으로 사용가능한 메서드는 다음과 같다.

     

    2.1 ArrayList

     

    - 배열을 통해 객체를 저장하고 다룬다.

    - 기존 배열과 차이점은 제한 없이 객체를 추가할 수 있다.

    - List 컬렉션은 객체 자체를 저장하는 것이 아니라, 객체의 번지를 저장함 (당연..?)

    - ArrayList는 데이터 탐색속도는 빠르지만, 삭제와 삽입(특히 중간 데이터)시 성능이 좀 별로다 이런 경우 사용 지양

     

    2.2 Vector

     

    - Vector은 ArrayList와 동일한 구조를 가지고 있다.

    - 차이점은 Vector는 동기화된 메서드로 구성되어 있기 때문에 멀티 스레드가 동시에 vector메서드 실행 불가

    - 멀티스레드 환경에서 안전하게 객체를 추가 또는 삭제할 수 있다.

     

    2.3 LinkedList

     

    - 배열이 아닌 node로 구현

    - 특정 위치 객체 삽입과 삭제시 성능이 좋다!  

     

    3. Set컬렉션

     

    - List는 저장 순서를 유지하지만, Set은 저장 순서가 유지되지 않는다. 

    - 객체를 중복 저장할 수 없고, 하나의 null만 저장할 수 있다. (집합)

    - 입력순서와 출력순서가 다름

     

    *인덱스로 관리,x 인덱스 매개값 메소드 없음

     

    3.1 HashSet

     

    - 가장 많이 사용되는 Set

    - HashSet은 저장될 객체의 hashcode값과 equals값을 비교해서 동등객체를 판단한다.

    - Set 컬렉션은 인덱스로 객체를 검색하지 않기 때문에 for문을 활용하는 두가지 방법이 있다.

     

    for( E e : set){
    
    }
    // 이터레이터 활용
    Interator<E> iterator = set.iterator();

     

     

    4. Map 컬렉션

     

     

    - 키와 값으로 구성된 엔트리 객체를 저장 ( 키는 중복x, 값은 중복 가능) 

    - HashMap,Hashtable,Properties,TreeMap 등등이 있다.

    - 기존 저장된 키와 동일한 키로 값을 저장하면, 기존값 삭제 -> 새로운 값으로 대치

    * 키로 객체를 관리하므로, 키를 매개값으로 가지는 메소드가 많다.

    * Map에서 키와 값을 출력할때 

    - Map.keySet() 혹은 Map.entrySet()을 이용할 수 있는데, entrySet()을 이용하면,  더 쉽게 key와 값을 출력할 수 있다.

     

    4.1 HashMap

     

    -  객체의 hashCode()와 equals()메소드를 통해 동일객체인지 검사한다.

     

    4.2 Hashtable

     

    - 동일한 내부구조, 차이점은 동기화된 메서드로 구성되어 있다.

     

    4.3 Properties

     

    - Hashtable에 자식 클래스, Hashtable의 특징 그대로 가지고 있다.

    - 키와 값이 String 타입으로 제한됨 

    - 주로 확장자가 Properties인 프로퍼티 파일 읽을 때 사용함 

     

     

    5. 검색 기능을 강화시킨 컬렉션

     

    - TreeSet과 TreeMap 

     

    5.1 TreeSet

     

    - 이진트리 기반 Set컬렉션 

    - TreeSet에 객체를 저장하면, 자동으로 정렬됨 (객체간 비교 - 우선순위)

    - 보통 TreeSet 참조변수를 사용함 (Set이 아닌) 

     

    TreeSet에만 있는 메서드

     

    5.2 TreeMap

     

    - 이진 트리를 기반으로 한 Map컬렉션, TreeSet과의 차이점은 객체가 아닌, Entry 저장한다는 점 

    - 키를 기준으로 정렬된다.

     

    TreeMap 메서드

     

     

    6. Comparable과 Comparator 

     

    - TreeSet과 TreeMap에 저장되는 키 객체는 정렬기준이 필요하다.

    - 기본정렬기준인 Comparable과 compareTo(T o)메서드를 구현하고 있어야한다.

     

    - Comparable 비구현 객체를 저장하고 싶다면,

    - TreeMap이나 TreeSet을 생성할 때 비교자(Comparator)를 제공해주자.

     

    7. Stack와 Queue

     

     

    8. 동기화된 컬렉션 

     

     - 컬렉션 프레임워크의 대부분은 싱글 스레드 환경에서 사용하도록 설계됨

     - Vector과 Hashtable는 동기화된 메서드로 구성되어 있지만, ArrayList와 HashSet과 Map등은 아님 

     - 이런 경우를 대비해서 컬렉션 프레임워크는 비동기를 동기화된 메소드로 래핑하는 

        synchronizedXXX()메서드를 제공한다.

        위 메서드에 매개값으로 비동기화된 컬렉션을 대입하면, 동기화된 컬렉션을 리턴한다.

     

    9. 수정할 수 없는 컬렉션

     

    - 요소를 추가, 삭제할 수 없는 컬렉션을 의미한다.

     

    //of()
    List<E> immutableList = List.of(E..elements);
    Set<E> immutableSet = Set.of(E...elements);
    Map<K,V> immutableMap = Map.of(...);
    
    
    //기존 컬렉션을 수정 불가 컬렉션으로 만들기 copyof()
    List<E> immutableList = List.copyof(Collection<E> coll);
    Set<E> immutableSet = Set.copyOf(Collection<E> col;);
    Map<K,V> immutableMap = Map.copyOf(Map<K,Y> map);
    
    //배열로 부터 수정할 수 없는 List 컬렉션 만들기
    String[] arr = {"A","B","C"};
    List<String> immutableList = Arrays.asList(arr);

    '언어 > JAVA' 카테고리의 다른 글

    -JavaNextStep (1) - Junit  (0) 2023.07.10
    컬렉션 예시들  (0) 2023.07.09
    어노테이션  (0) 2023.07.08
    중첩 선언과 익명 객체  (0) 2023.07.07
    상속,동적생성  (0) 2023.07.06
Designed by Tistory.