ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 스터디 5회차 - 컬렉션 프레임워크 (5)
    카테고리 없음 2024. 4. 19. 17:51

     

    객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들이 있음.

    이걸 다 통틀어서 컬렉션 프레임워크라고 함!

     

    List와 Set은 컬렉션의 하위에 있음

    Map 인터페이스는 Collection 인터페이스와 다른 저장 방식을 갖음

     

     

    컬렉션 프레임워크 구조

     

    List 순서 O, 중복 O

    객체를 인덱스로 관리함. 객체 저장하면 인덱스가 부여되고, 객체를 검색, 삭제할 수 있는 기능을 제공

     

    ArrayList

    가장 많이 씀. ArrayList에 객체를 추가하면 배열에 객체가 저장

    일반 배열과 차이점은 ArrayList는 제한 없이 객체를 추가할 수 있음!

    객체의 번지를 저장, 중복 저장도 가능한데 이런 경우는 같은 번지가 저장.  null 저장 가능

     

    삭제, 삽입이 많은 경우는 비추

     

    Vector

    ArrayList와 동일한 구조. 벡터는 동기화 된 메소드로 구성되어 있어 멀티 스레드가 동시에 Vector() 메소드를 실행 불가

    멀티 스레드 환경에서는 안전하게 객체를 추가, 삭제 가능

     

    LinkedList

    ArrayList와 사용 방법은 동일하나 내부 구조는 완전 다름. 인접 객체를 체인처럼 연결해서 관리.

    특정 위치에 객체를 삽입하거나 삭제하면 바로 앞뒤 링크만 변경하면 돼서 삭제, 삽입이 잦을 때는 ArrayList보다 성능 좋음


     

    Set 순서 X, 중복 X

    수학의 집합에 비유. 구슬 주머니. 인덱스로 관리하지 않기 때문에 인덱스를 매개값으로 갖는 메서드가 없음

     

    Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메소드가 없음! 그래서 하나씩 가져와야하는데  for문 사용 혹은 Set 컬렉션의 iterator() 메서드로 반복자를 얻어서 객체를 하나씩 꺼내는 법

     

    HashSet

    가장 많이 씀. 타입 파라미터에 저장하고 싶은 객체의 타입을 지정하면 됨. 객체 타입 생략하면 모든 종류 객체 저장 가능

    동일한 객체는 중복 저장 X (동등 객체)

    * 다른 객체라도 hashCode() 메소드의 리턴값이 같고, equals() 메소드가 true를 리턴하면 동일한 객체라고 판단하고 중복 저장 X

     


     

    Map 키와 값, 키는 중복X 값은 중복 O

    기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치

    키로 객체들을 관리하기 때문에 키를 매개값으로 갖는 메서드가 많음

     

    HashMap

    키로 사용할 객체가 hashCode() 메서드의 리턴값이 같고 equals() 메서드가 true를 리턴할 경우, 동일 키로 보고 중복 저장을 허용하지 않음

    모든 타입의 키와 객체를 저장할 수는 있지만, 이런 경우는 거의 없음

     

    Hashtable

    HashMap과 동일한 내부 구조. Hashtable은 동기화 메서드로 구성. 멀티 스레드로 동시에 메서드 실행 불가. 안정성

    모든 타입의 키와 객체를 저장할 수는 있지만, 이런 경우는 거의 없음

     

    Properties

    Properties는 Hashtable의 자식 클래스. Hashtable의 특징을 가짐

    Properties는 키와 값을 String으로 제한한 컬렉션

    프로퍼티 파일은 클래스 파일들과 함께 저장돼서 클래스를 기준으로 상대 경로를 이용해서 읽는 것이 편함

     


     

    TreeSet과 TreeMap은 컬렉션 프레임워크 중에서 검색 기능이 좋음

     

    TreeSet

    이진트리를 기반. 여러 개의 노드가 트리형태로 연결된 구조. 각 노드에 최대 2개씩 노드를 연결할 수 있는 구조

    부모 노드랑 비교해 낮은건 왼쪽 노드, 큰건 오른쪽 노드에 저장

     

    TreeMap

    이진트리를 기반. TreeSet과 차이점은 키와 값이 저장된 Entry를 저장한다는 점.

    TreeMap에 엔트리를 저장하면 키를 기준으로 자동 정렬.

    부모 노드랑 비교해 낮은건 왼쪽 노드, 큰건 오른쪽 노드에 Entry 객체를 저장

     

    Comparable과 Comparator(비교)

    TreeSet에 저장되는 객체와 TreeMap에 저장되는 키 객체는 저장과 동시에 오름차순으로 정렬되는데, 어떤 객체든 정렬될 수 있는 건 아니고 객체가 Comparable 인터페이스를 구현하고 있어야 가능!

    Integer, Double, String 타입은 모두 Comparable을 구현하고 있기 때문에 상관없지만, 사용자 정의 타입의 객체를 저장할땐 Comparable을 구현하고 있어야함

     


     

    LIFO와 FIFO 컬렉션

    Stack 인터페이스

    Lifo 라스트 인 퍼스트 아웃 / 밑이 막힌 상자, 책 쌓기, ArrayList

     

    Queue 인터페이스

    Fifo 퍼스트 인 퍼스트 아웃 / 양끝이 뚫린 상자, 줄 서기, LinkedList

     


     

     

    경우에 따라서 동기화된 컬렉션을 멀티 스레드 환경에서 사용하고 싶을때는, 비동기화된 메소드를 동기화하려면 메소드로 래핑하는 Collections의 SynchronizedXXX() 메소드 사용

     

Designed by Tistory.