Set > 순서 X , 중복 O
HashSet
> Set 인터페이스를 구현한 대표적인 컬렉션 클래스
> 순서를 유지하려면, LinkedHashSet 클래스를 사용하면 된다.
> 객체를 저장하기 전에, 기존에 같은 객체가 있는지 확인 (순서 X / 중복 X)
TreeSet
> 범위 검색과 정렬에 유리한 컬렉션 클래스
> HashSet보다 데이터 추가, 삭제에 시간이 더 걸림
HashSet 예제
import java.util.*;
public class ex11_9 {
public static void main(String[] args) {
Object[] objArr = {"1",new Integer(1), "2","2","3","3","4","4","4"};
Set set = new HashSet();
for(int i=0; i< objArr.length; i++) {
set.add(objArr[i]); //HashSet에 objArr의 요소들을 저장한다.
}
// HashSet에 저장된 요소들을 출력한다.
System.out.println(set);
// HashSet에 저장된 요소들을 출력한다 (Iterator 이용)
Iterator it = set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
[1, 1, 2, 3, 4]
1
1
2
3
4
import java.util.*;
public class ex11_10 {
public static void main(String[] args) {
Set set = new HashSet();
// set의 크기가 6보다 작은 동안 1~45사이의 난수를 저장
for(int i=0; set.size() <6; i++) {
int num = (int)(Math.random()*45)+1;
//set.add(new Integer(num)); 아래와 동일한 의미
set.add(num);
}
//Set은 정렬이 불가하니, List로 옮기고 정렬해야 함.
// 1. Set의 모든 요소를 List에 저장
// 2. List를 정렬
// 3. List를 출력
List list = new LinkedList(set); //LinkedList(Collection c)
Collections.sort(list); // Collections.sort(List list)
System.out.println(list);
}
}
[6, 15, 31, 34, 44, 45]
import java.util.*;
public class ex11_11 {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("abc");
set.add("abc"); //중복이라 저장안됨.
set.add(new Person("David",10));
set.add(new Person("David",10));
System.out.println(set);
}
}
// equals()와 hashCode()를 오버라이딩해야 HashSet이 바르게 동작
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + ":"+ age;
}
@Override
public int hashCode() {
// int hash(Object... values); //가변인자
return Objects.hash(name,age);
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Person)) return false;
Person p = (Person)obj;
// 나 자신(this)의 이름과 나이를 p와 비교
return this.name.equals(p.name)&& this.age==p.age;
}
}
[David:10, abc]
'개인공부' 카테고리의 다른 글
재귀함수란? (Recursion) (0) | 2022.08.31 |
---|---|
TreeSet - 범위 탐색, 정렬 (0) | 2022.08.23 |
Arrays (0) | 2022.08.22 |
지네릭스 (Generics) (0) | 2022.08.21 |
Iterator / ListIterator / Enumeration / Map (0) | 2022.08.17 |
댓글