Set 컬렉션, Map 컬렉션, Queue 컬렉션

kmb·2022년 11월 15일
0

자바

목록 보기
19/31

Set 컬렉션 특징

  1. List 컬렉션 저장 순서를 유지하지만, Set 컬렉션은 저장 순서가 유지되지 않는다.
    (저장순서가 100% 보장 할 수 없다는것이며 대부분은 넣은값의 hashcode값에 따라서 순서가 정해져 나온다)

  2. 객체의 중복 저장이 불가능하다.

 

Set 인터페이스를 구현한 클래스 종류

  • HashSet
Set<E> set = new HashSet<E>();
  1. 저장된 객체를 index로 관리하지 않기 때문에 저장순서가 보장되지 않는다.

  2. 객체를 저장하기전에 객체의 hashCode( ) 메서드를 호출해서 해시코드를 얻어낸 다음에
    이미 저장 되어있는 객체들의 해시코드와 비교해서 동일한 해시코드가 있다면 equals( ) 메서드로 두 객체를 비교해서 true가 나오면 동일 객체로 판단하여 중복 저장하지 않는다.

 

  • TreeSet

저장된 데이터값에 따라서 정렬된다. HashSet보다 약간 성능이 느리다.
사전순으로 출력.

 

  • LinkedHashSet

Set 인터페이스를 구현하고 HashSet클래스를 상속받은 Linked List 이다.
입력순으로 출력.

  1. iteration 작업을 할 경우 Set에 삽입된 순서대로 접근한다.

  2. 연결된 목록타입으로 구현된 hash테이블에 데이터를 저장. 성능이 가장 안좋다.


Map 컬렉션

키(Key)와 값(Value)로 구성된 Entity 객체를 저장하는 구조.

Key, Value 모두 객체이며 key는 중복될 수 없다.

 

Map 컬렉션 특징

  1. 키(Key)는 중복 저장 불가능. 값(Value)은 중복 저장 가능.

  2. 기존에 저장된 Key와 동일한 Key로 Value를 저장하면 기존 Value가 없어지고 새로운 Value로 대체된다.

 

Map 인터페이스를 구현한 클래스 종류

  • HashMap
Map<Key, Value> map = new HashMap<Key, Value>();
  1. Key와 Value의 타입은 기본타입을 사용 할 수 없고 클래스인터페이스 타입만 사용 할 수 있다.

  2. Thread safe 하지않다. (비동기 Asynchronized)

  3. HashMap의 Key로 사용되는 객체가 hashcode( ) 메서드를 재정의하여 반환값이 같고 동시에 equals( ) 메서드를 재정의하여 true를 반환한다면 동일한 Key로 본다.

 

  • HashTable
Map<Key, Value> map = new HashTable<Key, Value>();
  1. HashTable은 HashMap과 동일한 내부구조를 갖는다.

  2. Thread safe하다.
    HashMap과 다르게 HashTable은 동기화(synchroinzed) 메서드로 구성되어 있기 때문에 멀티스레드가 동시에 메서드들을 실행할 수 없고 하나의 스레드가 실행 완료되어야 다른 스레드를 실행할 수 있다.

    따라서 다수의 스레드가 동시에 HashTable에 접근해서 객체를 추가, 삭제하더라도 스레드에 안전하다.

  3. 검색속도가 매우 빠르다.
    왜그런가??
    Hash함수를 통해 만든 HashCode는 정수이다. 배열공간을 고정된 크기만큼 미리 만들어놓고 HashCode를 배열의 개수로 나머지 연산을 통해서 배열에 나눠담는다.
    즉 HashCode 자체가 배열방의 index로 사용되기 때문에 검색 자체를 할 필요 없이 HashCode로 바로 데이터 위치에 다이렉트로 접근할 수 있기 떄문이다.

 

  • TreeMap
    객체가 저장될때 key값에 따라서 오름차순으로 정렬된다.
    (정렬순서는 숫자 > 알파벳 대문자 > 알파벳 소문자 > 한글 순)
    검색 및 삽입에 O(logN) 소요.

 

  • LinkedHashMap
    key가 입력된 순서대로 정렬된다.
    value가 key입력 순서대로 출력된다.
    검색 및 삽입에 O(1) 소요.

 

  • Properties
  1. HashTable의 하위클래스이다.
    차이점은 Properties는 Key와 Value를 String 타입으로만 제한되며 HashTable은 Key와 Value를 다양한 타입으로 지정 가능하다.

  2. 애플리케이션 옵션정보, DB 연결정보, .properties 파일을 읽을때 사용

 

Map 컬렉션에서 데이터를 추가하는(담는) 메소드 종류

Map<String, Object> hmap = new HashMap<>( );

hmap.put("key1", "value1");
hmap.put("key2", "value2");
System.out.println("put result : " + hmap);

for(String key : hmap.keySet()) {
	System.out.println("ketSet result : " + key);
}

for(Object value : hmap.values()) {
	System.out.println("values result : " + value);
}

for(Map.Entry<String, Object> val : hmap.entrySet()) {
	System.out.println("key : " + val.getKey() + ", " + " val : " + val.getValue());        
}

.put(key, value) : 매개변수로 key, value값을 추가하고, 주어진 Key로 값을 저장하면 값을 반환. 새로운 Key일 경우 null 반환.

.keySet( ) : Map 컬렉션에 저장된 모든 key를 Set 컬렉션에 담아서 반환.

.value( ) : Map 컬렉션에 저장된 모든 value를 Collection에 담아서 반환.

.entrySet( ) : key와 value 쌍으로 구성된 모든 Map.entry 객체를 Set 컬렉션에 담아서 반환


Queue 인터페이스를 구현한 클래스 종류

  • Deque : 한쪽만 추가/삭제가 가능한 Queue와 달리 양쪽 끝에서 추가/삭제가 가능.

  • PriorityQueue : 저장한 순서에 관계없이 우선순위가 높은걸 꺼낸다.

profile
꾸준하게

0개의 댓글