Set 컬렉션
: 수학의 집합 개념
순서를 유지하지 않고 저장, 중복 저장 불가, 하나의 null만 저장 가능
(1) HashSet
: hashCode( ) 메서드의 리턴값이 같고, equals( ) 메서드가 true를 리턴하면 동일한 객체라고 판단하고 중복 저장하지 않음
데이터 중복을 방지하고 고유한 요소를 관리하기 위한 용도로 사용
예제 1 )
public class Set01 {
public static void main(String[] args) {
// 상속관계
// Object --> Set --> HashSet
Object[] objArr = {"1","2","2","3","3","3","4","4","4","4"};
Set set1 = new HashSet();
for(Object obj : objArr) {
set1.add(obj);
}
System.out.println("set의 길이 : " + set1.size());
System.out.println(set1);
}
}
예제 2 )
class Member {
String name;
int age;
public Member() { }
public Member(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return"Member [name=" + name + ", age= " + age + "]";
}
@Override
public int hashCode() {
return name.hashCode() + age;
//return Objects.hash(age,name);
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Member) {
Member member = (Member)obj;
return (member.age == age) && (member.name.equals(name));
}
return false;
}
}
public class Set02 {
public static void main(String[] args) {
Set<Member> set = new HashSet<Member>();
set.add(new Member("최재호", 30));
set.add(new Member("최재호", 30));
System.out.println(set.size());
}
}
HashSet 을 이용해 로또 번호 추출하기 !
public class Set03 {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
while(set.size() < 6) {
set.add((int)(Math.random()*45) + 1);
}
// 순서대로 출력
// index가 없기때문에 할 수 없음 => List로 변경 후 사용
List list = new LinkedList(set);
Collections.sort(list);
System.out.println(list);
}
}
(2) TreeSet
: 이진트리를 기반으로 한 Set컬렉션으로 검색 관련 메서드가 정의되어 있음
리턴타입 | 메서드 | 설명 |
E | first( ) | 제일 낮은 객체를 리턴 |
E | last ( ) | 제일 높은 객체를 리턴 |
E | lower(E e) | 주어진 객체보다 바로 아래 객체를 리턴 |
E | higher(E e) | 주어진 객체보다 바로 위 객체를 리턴 |
E | floor(E e) | 주어진 객체와 동등한 객체가 있으면 리턴, 없으면 주어진 객체의 바로 아래 객체를 리턴 |
E | ceiling(E e) | 주어진 객체와 동등한 객체가 있으면 리턴, 없으면 주어진 객체의 바로 위의 객체를 리턴 |
E | pollFirst( ) | 제일 낮은 객체를 꺼내오고 컬렉션에서 제거 |
E | pollLast( ) | 제일 높은 객체를 꺼내오고 컬렉션에서 제거 |
NavigableSet<E> | headSet(E toElement, boolean inclusive) |
주어진 객체보다 낮은 객체들을 NavigableSet으로 리턴, 주어진 객체 포함 여부는 두 번째 매개 값에 따라 달라짐 |
NavigableSet<E> | tailSet(E toElement, boolean inclusive) |
주어진 객체보다 높은 객체들을 NavigableSet으로 리턴, 주어진 객체 포함 여부는 두 번째 매개 값에 따라 달라짐 |
NavigableSet<E> | subSet(E toElement, boolean inclusive, E toElement, boolean inclusive) |
시작과 끝으로 주어진 객체 사이의 객체들을 NavigableSet으로 리턴, 시작과 끝 객체의 포함 여부는 두 번째, 네 번째 매개 값에 따라 달라짐 |
예제 1 )
public class TreeSet06 {
public static void main(String[] args) {
TreeSet<Integer> scores = new TreeSet<>();
scores.add(87);
scores.add(100);
scores.add(93);
scores.add(47);
scores.add(63);
scores.add(59);
System.out.println(scores.first());
System.out.println("가장 낮은 점수 : " + scores.first());
System.out.println("가장 높은 점수 : " + scores.last());
System.out.println("100점 아래 점수 : " + scores.lower(100));
System.out.println("70점 위 점수 : " + scores.higher(70));
System.out.println("74점과 동일한 점수 아니면 바로 아래 점수 : " + scores.floor(74));
System.out.println("74점과 동일한 점수 아니면 바로 위의 점수 : " + scores.ceiling(74));
// 매개변수 ( 점수, 본인 포함여부( 기본값 : false ))
System.out.println("87점보다 낮은 점수들 : " + scores.headSet(87, true));
// tailSet( 점수, 본인 포함여부( 기본값 : true ))
System.out.println("87점보다 높은 점수들 : " + scores.tailSet(87));
// subSet( 시작점수, 시작점수 포함여부( 기본값 : true ), 끝 점수 , 끝 점수 포함여부 ( 기본값 : false ))
System.out.println("74점 ~ 100점 사이의 점수들 : " + scores.subSet(74, 100));
System.out.println("가장 낮은 점수 삭제 : " + scores.pollFirst());
System.out.println(scores);
System.out.println("가장 높은 점수 삭제 : " + scores.pollLast());
System.out.println(scores);
}
}
예제 1 - 출력결과 )
예제 2 )
public class TreeSet07 {
public static void main(String[] args) {
int[] arrInt = {1, 4, 3 ,6 ,7 ,1, 6, 4, 6, 8}; // 10개 중 중복 : 4개
TreeSet<Integer> ts = new TreeSet<>();
for (Integer o : arrInt) {
ts.add(o);
}
System.out.println(Arrays.toString(arrInt));
System.out.println(ts); // 오름차순 정렬로 출력
// 내림차순 정렬 : descendingSet()
NavigableSet<Integer> descend = ts.descendingSet();
System.out.println(descend);
}
}
예제 2 - 출력결과 )
'Java' 카테고리의 다른 글
문자열 포함 여부 확인 ( contains , containsIgnoreCase ) (0) | 2024.05.01 |
---|---|
Java 문법) 컬렉션 프레임워크 - Map 컬렉션 (0) | 2023.11.03 |
Java 문법) 컬렉션 프레임워크 - List 컬렉션 (0) | 2023.11.03 |
Java 문법 ) Object클래스 - getClass (0) | 2023.11.02 |
Java 문법 ) Object클래스 - clone (0) | 2023.11.02 |