HashSet은 Set 인터페이스의 구현 클래스이다.
Set은 객체를 중복해서 저장할 수 없고 하나의 Null 값만 저장할 수 있다.
Set 인터페이스를 구현한 클래스로는 HashSet과 TreeSet이 있는데, TreeSet의 경우 HashSet과는 달리 자동정렬 해준다는 차이점이 있다.
Set은 주머니 형태이다. 비선형 구조이기에 저장 순서가 없으며 인덱스도 존재하지 않는다.
그래서 값을 추가하거나 삭제할 때 내가 추가 혹은 삭제하고자 하는 값이 Set 내부에 있는지 검색한 뒤 추가나 삭제를 해야한다. 속도가 List 구조에 비해 느리다.
HashSet<Integer> set1 = new HashSet<Integer>(); //HashSet 생성
HashSet<Integer> set1 = new HashSet<Integer>(); //타입 생략 가능
HashSet<Integer> set2 = new HashSet<Integer>(set1); //set1의 모든 값을 가진 HashSet 생성
HashSet<Integer> set3 = new HashSet<Integer>(Arrays.asList(1, 2, 3, 4, 5,)); //초기값 지정
HashSet<Integer> set = new HashSet<>();
set.add(1); //값 추가
set.remove(1); //값이 1인 요소 제거
set.add(2);
set.add(3);
set.add(4);
set.clear(); //모든 값 제거
HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(2, 4, 6, 8, 10));
System.out.println(set.size()); //5
HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1, 3, 5, 7, 9,));
System.out.println(set.isEmpty()); //false
HashSet<Integer> set2 = new HashSet<Integer>();
set2.add(1);
set2.remove(1);
System.out.println(set2.isEmpty()); //true
HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1, 2, 3, 4, 5));
System.out.println(set.contains(3)); //true
System.out.println(set.contains(6)); //false
Set 컬렉션을 그냥 출력할 경우 set의 전체값이 출력된다.
Set은 배열이나 list처럼 인덱스로 객체를 가져오는 get(index)메소드가 없기 때문에, 객체 전체를 대상으로 한번씩 반복해서 가져오는 Iterator를 사용해야 한다.
(Iterator도 따로 import해주어야 한다.)
HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(2, 4, 6, 8, 10));
System.out.println(set); //[2, 4, 6, 8, 10]
Iterator iter = set.iterator();
while(iter.hasNext()) { //다음 값이 존재하면 반복
System.out.print(iter.next() + " "); //2 4 6 8 10
}
retainAll() 메소드 사용 HashSet a = new HashSet(Arrays.asList(1, 2, 3, 4, 5));
HashSet b = new HashSet(Arrays.asList(2, 4, 6, 8, 10));
a.retainAll(b);
System.out.println("교집합: " + a); //[2, 4] 출력
addAll() 메소드 사용HashSet a = new HashSet(Arrays.asList(1, 2, 3, 4, 5));
HashSet b = new HashSet(Arrays.asList(2, 4, 6, 8, 10));
a.addAll(b);
System.out.println("합집합: " + a); //[2, 4, 6, 8, 10] 출력
removeAll() 메소드 사용HashSet a = new HashSet(Arrays.asList(1, 2, 3, 4, 5));
HashSet b = new HashSet(Arrays.asList(2, 4, 6, 8, 10));
a.removeAll(b);
System.out.println("차집합: " + a); //[1, 3, 5] 출력
여집합은 전체집합 중 A의 원소가 아닌 것들의 집합이다.
containsAll() 메소드 사용HashSet a = new HashSet(Arrays.asList(1, 2, 3, 4, 5));
HashSet b = new HashSet(Arrays.asList(2, 4));
HashSet c = new HashSet(Arrays.asList(1, 7));
System.out.println(a.containsAll(b)); //true 출력
System.out.println(a.containsAll(c)); //false 출력
List<Integer> list = new ArrayList<>();
Set<Integer> set = new HashSet<>(list); // list -> set
List<Integer> list = new ArrayList<>(set); // set -> list