Programming/Java
hashCode / equals
SharingWorld
2018. 4. 2. 10:39
hashCode / equals 객체의 동등성에 판단에 사용되는 메소드
import java.util.*;
class User implements Comparable<User> {
// class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(User o) {
// return Integer.compare(age, o.age);
return name.compareTo(o.name);
}
// hashCode / equals
// : 객체의 동등성에 판단에 사용되는 메소드
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (this == obj)
return true;
// User의 자식 클래스가 왔을 때 어떻게 동작하게 하겠는가?
if (obj.getClass() == User.class) // 1. 동작하지 않는다.
// if (!(obj instanceof User)) // 2. 동작한다.
return false;
User u = (User) obj;
return Objects.equals(name, u.name) &&
age == u.age;
}
}
// 상속: is-a
// Mother is a User
class Mother extends User {
private int childrenCount;
public Mother(String name, int age, int childrenCount) {
super(name, age);
this.childrenCount = childrenCount;
}
}
public class Program_0321 {
public static void main(String[] args) {
Set<User> user = new TreeSet<>();
user.add(new User("Tom1", 45));
user.add(new User("Tom2", 43));
user.add(new User("Tom3", 42));
user.add(new User("Tom4", 44));
user.add(new User("Tom1", 45));
user.add(new Mother("Tom5", 60, 3));
for (User e : user) {
System.out.println(e);
}
}
/*
public static void main(String[] args) {
List<String> list = Arrays.asList(
"Tom",
"Bob",
"구",
"이",
"홍",
"허",
"허",
"허",
"허",
"허"
);
Set<String> s = new TreeSet<>(list);
for (String e : s) {
System.out.println(e);
}
}
*/
}