순서와 상관없이 중복을 허용하지 않는 경우에는 Set 인터페이스를 구현한 클래스를 사용 합니다.
public static void main(String[] args) {
HashSet<String> set = new HashSet<>(Arrays.asList("H", "e", "l", "l", "o"));
System.out.println(set);
}
HashSet<String> set = new HashSet<>();
set.add("Java");
set.add("C");
set.add("C++");
set.add("Python");
set.add("Java");
for(String e : set) {
System.out.println(e + " ");
}
}
기본적으로 인스턴스 주소가 같으면 같은 객체 입니다. 하지만 아래의 예제에서는 회원 아이디가 같으면 같은 회원으로 볼 수 있습니다. 이런 경우 Object 클래스의 hashCode()와 equals()를 오버라이드 해서 사용 할 수 있습니다.
👉 모든 클래스는 Object의 매서드를 사용할 수 있고, 필요에 따라 재정의해서 사용 할 수 있습니다. 하지만 Object의 모든 메소드를 재정의해서 사용할 수 있는 것은 아닙니다. (final로 선언된 메소드는 재정의 할 수 없습니다.)public class MemberHashSetTest {
public static void main(String[] args) {
HashSet<Member> hashSet = new HashSet<>();
Member member1 = new Member(1001, "유나");
Member member2 = new Member(1002, "채원");
Member member3 = new Member(1003, "지수");
hashSet.add(member1);
hashSet.add(member2);
hashSet.add(member3);
hashSet.add(new Member(1003, "카리나"));
for(Member e : hashSet) e.showMember();
}
}
class Member {
int id;
String name;
@Override
public int hashCode() {
return id;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Member) {
Member member = (Member) obj;
if(this.id == member.id) return true;
else return false;
}
return false;
}
public Member(int id, String name) {
this.id = id;
this.name = name;
}
public void showMember() {
System.out.println("아이디 : " + id);
System.out.println("이름 : " + name);
}
}
public static void main(String[] args) {
HashSet<Integer> s1 = new HashSet<>(Arrays.asList(1,2,3,4,5,6));
HashSet<Integer> s2 = new HashSet<>(Arrays.asList(4,5,6,7,8,9));
s1.retainAll(s2); // 교집합을 수행하는 메소드
System.out.println(s1);
}
public static void main(String[] args) {
HashSet<Integer> s1 = new HashSet<>(Arrays.asList(1,2,3,4,5,6));
HashSet<Integer> s2 = new HashSet<>(Arrays.asList(4,5,6,7,8,9));
s1.addAll(s2); // 합집합을 수행
System.out.println(s1);
}
public static void main(String[] args) {
HashSet<Integer> s1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6));
HashSet<Integer> s2 = new HashSet<>(Arrays.asList(4, 5, 6, 7, 8, 9));
HashSet<Integer> substract = new HashSet<>(s1); // s1으로 substract 생성
substract.removeAll(s2); // 차집합 수행
System.out.println(substract); // [1, 2, 3] 출력
}
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Jump");
set.add("To");
set.add("Java");
System.out.println(set); // [Java, To, Jump] 출력
}
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Jump");
set.addAll(Arrays.asList("To", "Java"));
System.out.println(set); // [Java, To, Jump] 출력
}
public static void main(String[] args) {
HashSet<String> set = new HashSet<>(Arrays.asList("Jump", "To", "Java"));
set.remove("To");
System.out.println(set); // [Java, Jump] 출력
}
public static void main(String[]args) {
HashSet<Integer>set = new HashSet<>();
while(true) {
int val = (int)(Math.random()* 45) + 1;
set.add(val);
if(set.size() == 6) break;
}
System.out.println(set);
}
해시 알고리즘이란 해시 함수를 사용하여 데이터를 해시 테이블에 저장하고 다시 그것을 검색하는 알고리즘 입니다.
)
자바에서 해시 알고리즘을 이용한 자료 구조는 위의 그림과 같이 배열과 연결 리스트로 구현 됩니다.