package queue
import java.util.HashSet
public class Test {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println(s1.equals(s2)); //true
System.out.println(s1 == s2); //true ==> 같은 주소값에 있는 "abc"를 바로보고 있다.
String p1 = new String("abc");
String p2 = new String("abc");
System.out.println(p1.equals(p2)); //true
System.out.println(p1 == p2); //false ==> 다른 주소값에 있는 서로 다른 "abc"를 보고있다.
HashSet set = new HashSet();
//set에 들어갈때 중복검사하는데 중복검사시 사용하는 함수는 equals()함수이다.
set.add("dog"); //String과 기본 자료형은 equals()로 비교하여 같기때문에 set에서 중복이라 여겨 하나만 나온다.
set.add("dog");
System.out.println(set);
set.add(new String("def"));
set.add(new String("def"));
System.out.println(set);
Person p3 = new Person("kim", 10);
Person p4 = new Person("kim", 10);
System.out.println(p3.equals(p4));
set.add(p3);
set.add(p4); // set에 넣을때 객체를 equals로 비교했을때 p3와 p4는 주소가 다르기때문에 서로 다르다고 나와서
//객체 내의 데이터는 중복되도 set에 들어갈수있게 된다.
System.out.println(set);
}
}
class Person{
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + ", " + age;
}
}
만약 p3 와 p4의 데이터가 같으면 HashSet에 넣지 않으려면
1. equals(Object o)메소드를 오버라이딩 해서 재정의 해주고,
2. hashCode()메소드도 오버라이딩을 해주면 된다.
public boolean equals(Object obj) {
if(obj instanceof Person) {
Person tmp = (Person)obj;
return name.equals(tmp.name);
}
return false;
}
public int hashCode() {
return name.hashCode();
}
*참고.
TreeSet으로 만들때는 객체의 정보까지 중복을 찾아내 처리하기에 객체내의 정보가 같다면 TreeSet에 추가할 수 없다.
==> 따라서 TreeSet은 기본형 데이터, 참조형 데이터 모두 중복을 검사해서 추가한다.
'비트교육센터[전문가반]' 카테고리의 다른 글
선형 자료 구조 _ 연접 리스트(배열) (0) | 2021.02.15 |
---|---|
테트리스 (2인용) (0) | 2021.02.15 |
Comparable<T> 인터페이스 (0) | 2021.02.05 |
compareTo(), equal() 메서드 (0) | 2021.02.05 |
HashMap 데이터 입력, 출력 (0) | 2021.02.05 |