본문 바로가기
개인공부

HashSet

by 리승우 2022. 8. 23.

Set > 순서 X , 중복 O

 

HashSet

> Set 인터페이스를 구현한 대표적인 컬렉션 클래스

> 순서를 유지하려면, LinkedHashSet 클래스를 사용하면 된다.

> 객체를 저장하기 전에, 기존에 같은 객체가 있는지 확인  (순서 X / 중복 X)

 

TreeSet

> 범위 검색과 정렬에 유리한 컬렉션 클래스

> HashSet보다 데이터 추가, 삭제에 시간이 더 걸림

 

HashSet  예제

import java.util.*;

public class ex11_9 {

	public static void main(String[] args) {
		Object[] objArr = {"1",new Integer(1), "2","2","3","3","4","4","4"};
		Set set = new HashSet();
		
		for(int i=0; i< objArr.length; i++) {
			set.add(objArr[i]); //HashSet에 objArr의 요소들을 저장한다.
		}
		// HashSet에 저장된 요소들을 출력한다.
		System.out.println(set);
	
		// HashSet에 저장된 요소들을 출력한다 (Iterator 이용)
		Iterator it = set.iterator();
	
		while(it.hasNext()) {
			System.out.println(it.next());
	}
}
}

[1, 1, 2, 3, 4]
1
1
2
3
4

 

import java.util.*;

public class ex11_10 {
	public static void main(String[] args) {
		Set set = new HashSet();
		
		// set의 크기가 6보다 작은 동안 1~45사이의 난수를 저장
		for(int i=0; set.size() <6; i++) {
			int num = (int)(Math.random()*45)+1;
			//set.add(new Integer(num)); 아래와 동일한 의미
			set.add(num);
		}
		
		//Set은 정렬이 불가하니, List로 옮기고 정렬해야 함.
		// 1. Set의 모든 요소를 List에 저장
		// 2. List를 정렬
		// 3. List를 출력
		List list = new LinkedList(set); //LinkedList(Collection c)
		Collections.sort(list); // Collections.sort(List list)
		System.out.println(list);
	}
}

[6, 15, 31, 34, 44, 45]

 

import java.util.*;

public class ex11_11 {

	public static void main(String[] args) {
		HashSet set = new HashSet();
		
		set.add("abc");
		set.add("abc"); //중복이라 저장안됨.
		set.add(new Person("David",10));
		set.add(new Person("David",10));
		
		System.out.println(set);
	}
}


// equals()와 hashCode()를 오버라이딩해야 HashSet이 바르게 동작
class Person {
	String name;
	int age;
	
	Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public String toString() {
		return name + ":"+ age;
	}
	
	@Override
	public int hashCode() {
		// int hash(Object... values); //가변인자
		return Objects.hash(name,age);
	}

	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof Person)) return false;
		
		Person p = (Person)obj;
		// 나 자신(this)의 이름과 나이를 p와 비교
		return this.name.equals(p.name)&& this.age==p.age; 
	}
}

[David:10, abc]

 

 

'개인공부' 카테고리의 다른 글

재귀함수란? (Recursion)  (0) 2022.08.31
TreeSet - 범위 탐색, 정렬  (0) 2022.08.23
Arrays  (0) 2022.08.22
지네릭스 (Generics)  (0) 2022.08.21
Iterator / ListIterator / Enumeration / Map  (0) 2022.08.17

댓글