Hi

hashCode / equals 본문

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);
	}
}
*/
}



'Programming > Java' 카테고리의 다른 글

Java, 객체(class)를 정렬할 수 있게 하려면  (0) 2018.04.03
자료구조  (0) 2018.04.02
Reflection  (0) 2018.04.02
얕은 복사, 깊은 복사, 참조 계수(Reference Counting)  (0) 2018.03.30
Exception(예외)와 try-with-resources  (0) 2018.03.29