kotlin/java

Set, HashSet, equals, hashCode override 예제

slow333 2023. 1. 6. 15:50

중복을 허락하지 않는 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