다른 컬렉션, 자료구조에 대한 설명이 필요하다면 아래 링크를 타시라.🤗
HashSet
데이터의 저장순서가 유지되지 않고 중복을 허용하지 않는다.특징을 히용하여 컬렉션 내의 중복 요소를 제거하기 편하다.해싱(Hashing)을 사용하여많은 양의 데이터를 검색하는데 높은 성능을 보인다.**
Set인터페이스를 구현한 가장 **대표적인 컬렉션이다.👏
**💡(많은 양의 데이터를 저장하는데 적합하다.)**
HashSet은 저장순서를 유지하지 않기 때문에 만약 저장순서를 유지하고 싶다면 LinkedHashSet
을 사용해야 한다.
생성자
생성자 | 설 명 |
HashSet() | HashSet객체를 생성한다. |
HashSet(Colleaction c) | 주어진 컬렉션을 포함하는 HashSet객체를 생성한다. |
HashSet(int initialCapacity) | 주어진 값을 초기용량으로 하는 HashSet객체를 생성한다. |
HashSet(int initialCapacity, float loadFactor) | 초기용량과 load factor를 지정하는 생성자. |
load factor?
저장공간이 가득 차기 전에 미리 용량을 확보하기 위한 것
예를 들어 이 값이 0.7면 저장공간의 70%가 채워졌을 때 용량이 2배로 늘어난다.
지정 하지 않았을때의 디폴트 값은 75%로 load factor가 0.75이다.
메소드
add, addAll - 객체 추가
메소드 | 설 명 |
boolean add(Object obj) | 새로운 객체를 저장한다. |
boolean addAll(Collection c) | 주어진 컬렉션에 저장된 모든 객체들을 추가한다.(합집합) |
Set hashSet1 = new HashSet();
// set은 중복이 불가하기 때문에 중복된 노드들은 제거됐다.
hashSet1.add(1); // Integer 타입의 숫자 1
hashSet1.add("1"); // 문자열 1
hashSet1.add("2"); // 문자열 2
hashSet1.add("2"); // 문자열 2
hashSet1.add("3"); // 문자열 3
hashSet1.add("3"); // 문자열 3
//숫자 1과 문자 1은 타입이 다르기 때문에 제거되지 않는다.
System.out.println(hashSet1); //결과 : [1, 1, 2, 3]
Set hashSet2 = new HashSet();
hashSet2.add("1");
hashSet2.add("2");
hashSet2.add("4");
//set은 중복이 불가하기 때문에 hashSet1의 노드중
//hashSet2의 노드와 동일한 값이 있다면 제거된다.
hashSet2.addAll(hashSet1); // hashSet1의 모든 노드를 hashSet2에 저장한다.
System.out.println(hashSet2); // 결과 : [[1, 1, 2, 3, 4]
clear - 모든 데이터 삭제
메소드 | 설 명 |
void clear() | 저장된 모든 객체를 삭제한다. |
Set set = new HashSet();
set.add(1);
set.add(2);
System.out.println(set); // 결과 : [1, 2]
set.clear();
System.out.println(set); // 결과 : []
clone - 복제
메소드 | 설 명 |
Object clone() | HashSet을 복사해서 반환한다.(얕은 복사) |
HashSet set1 = new HashSet();
set1.add(1);
set1.add(2);
System.out.println(set1); // 결과 : [1, 2]
HashSet set2 = (HashSet) set1.clone();
System.out.println(set2); // 결과 : [1, 2]
contains, containsAll - 데이터 확인
메소드 | 설 명 |
boolean contains(Object obj) | 지정된 객체를 포함하고 있는지 알려준다. |
boolean containsAll(Collection c) | 주어진 컬렉션에 저장된 모든 객체들을 포함하고 있는지 알려준다. |
HashSet set1 = new HashSet();
set1.add(1);
set1.add(2);
System.out.println(set1.contains(3)); // 결과 : false
HashSet set2 = new HashSet();
set2.add(1);
set2.add(2);
System.out.println(set2.containsAll(set1)); // true
isEmpty() - 비었는지 확인
메소드 | 설 명 |
boolean isEmpty() | HashSet이 비었는지 알려준다. |
HashSet set1 = new HashSet();
set1.add(1);
set1.add(2);
System.out.println(set1.isEmpty()); // 결과 : false
HashSet set2 = new HashSet();
System.out.println(set2.isEmpty()); // true
iterator() - Iterator반환
메소드 | 설 명 |
Iterator iterator() | Iterator를 반환한다. |
HashSet set1 = new HashSet();
set1.add(1);
set1.add(2);
Iterator it = set1.iterator();
while (it.hasNext()) {
System.out.print(it.next()); // 결과 : 12
}
remove, removeAll - 삭제
메소드 | 설 명 |
boolean remove(Object obj) | 지정된 객체를 HashSet에서 삭제한다. (성공하면 true, 실패하면 false를 반환한다.) |
boolean removeAll(Collection c) | 주어진 컬렉션에 저장된 모든 객체와 동일한 것들을 HashSet에서 삭제한다.(차집합) (성공하면 true, 실패하면 false를 반환한다.) |
HashSet set1 = new HashSet();
set1.add(1);
set1.add(2);
set1.remove(2); // true;
set1.remove(3); // false;
System.out.println(set1); // 결과 : [2]
HashSet set2 = new HashSet();
set2.add(1);
set2.add(2);
set2.add(3);
set2.removeAll(set1); // 하나라도 삭제되면 true
System.out.println(set2); // 결과 : [2, 3]
retainAll - 동일한 것만 남기고 삭제
메소드 | 설 명 |
boolean retainAll(Collection c) | 주어진 컬렉션에 저장된 객체와 동일한 것만 남기고 삭제한다. (교집합) |
HashSet set1 = new HashSet();
set1.add(1);
set1.add(2);
set1.add(3);
HashSet set2 = new HashSet();
set2.add(1);
set2.add(2);
set2.add(4);
set2.retainAll(set1); // 일치하는 1, 2 외에 다 제거
System.out.println(set2); // 결과 : [1, 2]
size() - 저장 개수 반환
메소드 | 설 명 |
int size() | 저장된 객체의 개수를 반환한다. |
HashSet set1 = new HashSet();
set1.add(1);
set1.add(2);
System.out.println(set1.size()); // 결과 : 2
toArray() - 배열화
메소드 | 설 명 |
Object[] toArray() | 저장된 객체들을 객체배열의 형태로 반환한다. |
Object[] toArray(Object[] arr) | 저장된 객체들을 주어진 객체배열(arr)에 담는다. |
HashSet set1 = new HashSet();
set1.add(1);
set1.add(2);
set1.add(3);
Object[] objArr = set1.toArray();
HashSet set1 = new HashSet();
set1.add(1);
set1.add(2);
set1.add(3);
Object[] tmpArr = new Object[set1.size()];
Object[] objArr = set1.toArray(tmpArr);
댓글