중복을 허락하지 않는 Set의 특성을 활용한 예제
import java.util.HashSet;
import java.util.Set;
import java.util.*;
public class SetEx {
public static void main(String[] args) {
Object[] objArr = {"1", 2, "2", "3", "3", "4", "4", "4"};
Set<Object> set = new HashSet<>();
int i =0;
for (Object o : objArr) {
System.out.println(objArr[i++]+" : "+ set.add(o));
}
// java set은 type을 구분하여 Integer와 문자를 다른 값으로 취급함
System.out.println(set);
Set<Integer> set1 = new HashSet<>();
// set이 8개 될때 까지 내용 추가 , set의 특성상 중복이 없음
for (int in = 0; set1.size() < 8; i++) {
set1.add((int) (Math.random() * 45) +1);
}
System.out.println("not sorted set : "+set1);
// set을 형변환 하여 sort을 사용함
List<Integer> setList = new LinkedList<>(set1);
Collections.sort(setList);
System.out.println("sorted set : "+setList);
}
}
만든 class를 HashSet에 저장하려면 반드시 equals, hashCode가 override 되어 있어야함.
(안하면 중복된 값이 HashSet에 저장될 수 있음...)
< 예제>
import java.util.HashSet;
import java.util.Set;
import java.util.*;
public class SetEx {
public static void main(String[] args) {
Object[] objArr = {"1", 2, "2", "3", "3", "4", "4", "4"};
Set<Object> set = new HashSet<>();
int i =0;
for (Object o : objArr) {
System.out.println(objArr[i++]+" : "+ set.add(o));
}
// java set은 type을 구분하여 Integer와 문자를 다른 값으로 취급함
System.out.println(set);
Set<Integer> set1 = new HashSet<>();
// set이 8개 될때 까지 내용 추가 , set의 특성상 중복이 없음
for (int in = 0; set1.size() < 8; i++) {
set1.add((int) (Math.random() * 45) +1);
}
System.out.println("not sorted set : "+set1);
// set을 형변환 하여 sort을 사용함
List<Integer> setList = new LinkedList<>(set1);
Collections.sort(setList);
System.out.println("sorted set : "+setList);
HashSet<Person> personHashSet = new HashSet<>();
personHashSet.add(new Person("song", 33));
personHashSet.add(new Person("song", 33));
personHashSet.add(new Person("kim", 55));
personHashSet.add(new Person("kim", 55));
personHashSet.add(new Person("lee", 43));
personHashSet.add(new Person("jang", 23));
System.out.println(personHashSet);
}
}
class Person{
private String name;
private int age;
public boolean equals(Object o){
if (o instanceof Person) {
Person p = (Person) o;
return p.name.equals(this.name) && this.age == p.age;
}
return false;
}
// public boolean equals(Person p){ // 이러면 안됨...
// return p.name.equals(this.name) && this.age == p.age;
// }
public int hashCode(){
return (this.name+this.age).hashCode();
}
public Person(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() {
return "Person{ name='" + name + ", age=" + age +'}'+"\n";
}
}
'kotlin > java' 카테고리의 다른 글
HashMap 예제 (0) | 2023.01.06 |
---|---|
TreeSet 예제 (0) | 2023.01.06 |
무작위로 4개의 char를 추출해서 정렬 (0) | 2023.01.06 |
LocalDateTime 예제 (0) | 2023.01.06 |
Comparator 와 Comparable (0) | 2023.01.06 |