자바 - Set

공부/Spring 2021. 10. 18. 18:15
반응형

Set

순서 상관없이 어떤 데이터가 조재하는지 확인하기 위한 용도로 사용

중복되는 것을 방지하고 원하는 값이 포함되어 있는지 확인하는 용도

 

Set 인터페이스를 구현한 주요 클래스는 HashSet, TreeSet, LinkedHashSet가 있다

 

  • HashSet

순서가 필요없는 데이터를 해시테이블에 저장함. 성능이 가장 좋음

Object - AbstractCollection - AbstarctSet - HashSet 구조로 상속받는다.

 

HashSet의 생성자에는

HashSet() : 데이터를 저장할 수 있는 16개의 공간과 0.75의 load factor를 갖는 객체를 생성한다.

HashSet(Collection<? extends E> c) : 매개 변수로 받은 컬랙션 객체의 데이터를 HashSet에 담는다.

HashSet(int initialCapacity) :매개 변수로 받은 개수만큼의 데이터 저장 공간과 0.75의 load factor를 갖는 객체를 생성

HashSet(int initialCapacity, float loadFactor) : 첫번째 매개변수로 받은 개수만큼의 데이터 저장공간과, 두번째 매개변수로 받은 만큼의 load factor를 갖는 객체를 생성한다.

 

load factor : 데이터 개수/ 저장공간

데이터 개수가 증가하여 load factor 보다 커지면 저장공간의 크기는 증가되고 해시 재정리 작업을 해야한다.

=> 자료구조를 다시 생성하므로 "성능에 영향"

load factor가 클수록 공간은 넉넉해지지만, 데이터를 찾는 "시간은 증가"하게 된다.

=> 초기 공간 개수와 load factor는 데이터의 크기를 고려하여 산정하는 것이 좋음

 

HashSet의 주요 메소드들

boolean add(E e) : 데이터 추가

void clear() : 모든 데이터 삭제

Object clone() : HashSet 객체를 복제, 담겨잇는 데이터는 복제X

boolean isEmpty() : 데이터가 있는지 확인함

boolean contains(Object o) : 해당 객체가 있는지 확인

Iterator iterator() : 데이터를 꺼내기 위한 Iterator 객체를 리턴함

boolean remove(Object o) : 매개 변수로 넘어온 객체를 삭제함

int size() : 데이터의 개수

 

import java.util.HashSet;
import java.util.Iterator;

...
... main ...
String[] cars = new String[]{"Hyundai", "Kia", "Samsung", "BMW", "Audi", "Kia", "Samsung"};

...

//차종의 개수를 알아내려는 메소드
public int getCarKinds(String[] cars){
	if(cars == null) return 0;
	if(cars.length==1) return 1;
	
	//HashSet을 생성하여 add해줌 => 중복된 값이 없어짐
	HashSet<String> carSet=new HashSet<String>();
	for(String car : cars){
		carSet.add(car);
	}
	//size를 반환하면 차종의 수를 알 수 있음
	return carSet.size();
}

//값을 꺼낼경우 1=> 데이터의 저장순서는 뒤죽박죽이다. Set은 데이터의 저장순서가 중요하지않은 경우 사용한다.
public void printCarSet(HashSet<String> carSet){
	for(String temp : carSet){
		System.out.print(temp + " ");
	}
	System.out.println();
}

//값을 꺼낼 경우 2 => Iterator의 hasNext, next이용
public void printCarSet2(HashSet<String> carSet){
	Iterator<String> iter=carSet.iterator();
	while(iter.hasNext()){
		System.out.print(iter.next()+" ");
	}
}

 

 

TreeSet

저장된 데이터의 값에 따라서 정렬됨

red-black(이진트리)이라는 트리 타입으로 저장되며 HashSet보다 약간 느리다.

 

LinkedHashSet

연결된 목록타입으로 구현된 해시 테이블에 데이터 저장

저장된 순서에 따라 값이 정렬됨. 성능이 가장 나쁘다.

728x90
반응형

'공부 > Spring' 카테고리의 다른 글

스프링 웹개발 기초  (0) 2021.10.20
자바 - Map  (0) 2021.10.19
자바 - 컬렉션(List)  (0) 2021.10.15
자바 - 제네릭  (0) 2021.10.14
자바 문법  (0) 2021.10.13
블로그 이미지

아상관없어

,