본문 바로가기
개발/Java

[Java] 컬렉션 프레임워크 (2)

by devhooney 2022. 8. 16.
728x90

자바의 정석 챕터 11을 읽고 정리

 

1.4 Hashset

- Hashset은 Set 인터페이스를 구현한 가장 대표적인 컬렉션

- 중복된 요소를 저장하지 않음

- 저장순서를 유지하지 않음

Object[] objArr = {"1", new Integer(1), "2", "2", "3", "3"};
Set set = new Hashset();

for (int i = 0; i < objArr.length; i++) {
    set.add(objArr[i]);
}

System.out.println(set); // [1, 1, 2, 3]

- "1", "1"은 눈으로 볼 때는 같지만 첫 번째는 String 인스턴스이고, 하나는 Integer 인스턴스라서 중복으로 보지 않음

- 순서 보장을 원하면 LinkedHashSet 사용

 

- lotto 번호 생성 예제

Set set = new HashSet();

for (int i = 0; set.size() < 6; i++) {
    int num = (int)(Math.random() * 45) + 1;
    set.add(new Integer(num));
}

List list = new LinkedList(set)
Collection.sort(list);

 

1.5 TreeSet

- TreeSet은 이진 검색 트리라는 자료구조의 형태로 데이터를 저장하는 컬랙션 클래스.

- 정렬, 검색, 범위검색에서 성능이 좋음

- Set이므로 순서와 중복을 허용하지 않음

- 데이터의 추가, 삭제는 리스트보다 더 오래 걸리지만, 검색, 정렬은 빠르다.

 

- lotto 번호 생성 예제

Set set = new TreeSet();

for (int i = 0; set.size() < 6; i++) {
    int num = (int)(Math.random() * 45 ) + 1;
    set.add(num) // set.add(new Integer(num));
}

// TreeSet은 저장할 때 정렬한다.

 

- 범위 검색

TreeSet set = new TreeSet();
set.add("alien");
set.add("bat");
set.add("car");
set.add("dance");

String from = "b";
String to = "d";

System.out.println(set.subSet(from, to)); // [bat, car, dance]

 

1.6 HashMap 

- HashMap은 해싱(hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는데 성능이 좋다.

 

# 해싱

 키(Key) 값을 해시 함수(Hash Function)라는 수식에 대입시켜 계산한 후 나온 결과를 주소로 사용하여 바로 값(Value)에 접근하게 할 수 하는 방법

 

1.7 TreeMap

- 이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장

- 검색은 HashMap이 빠르지만, 범위검색이나 정렬은 TreeMap이 빠르다.

 

728x90

'개발 > Java' 카테고리의 다른 글

[Java] 예외처리  (0) 2022.08.23
[Java] Generics  (1) 2022.08.17
[Java] 컬렉션 프레임워크 (1)  (1) 2022.08.12
[Java] 객체 지향 설계 5원칙 - SOLID  (0) 2022.08.06
[Java] 자바가 확장한 객체 지향  (0) 2022.08.04