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
연결된 목록타입으로 구현된 해시 테이블에 데이터 저장
저장된 순서에 따라 값이 정렬됨. 성능이 가장 나쁘다.
'공부 > Spring' 카테고리의 다른 글
스프링 웹개발 기초 (0) | 2021.10.20 |
---|---|
자바 - Map (0) | 2021.10.19 |
자바 - 컬렉션(List) (0) | 2021.10.15 |
자바 - 제네릭 (0) | 2021.10.14 |
자바 문법 (0) | 2021.10.13 |