Set
집합을 의미하며 중복을 허용하지 않는 자료형
하나의 null값을 저장하며 객체를 중복해서 저장할 수 없다.
요소의 저장 순서를 유지해야한다면 : LinkedHashSet
자동 정렬 기능이 필요하다면 : TreeSet
잘 모르겠다면 : HashSet
HashSet
Set 인터페이스의 구현 클래스이며 그 성질을 상속한다. Hash구조 특성상 해쉬연산으로 인해 인덱스를 갖는 List 구조에 비해 속도가 느리다.
HashSet은 객체를 저장하기 전 먼저 객체의 hashCode()
함수를 호출해서 얻은 해쉬 코드값을 저장된 해시 코드값과 비교해 같은 해시코드가 있으면 equals()
메소드로 두 객체를 비교해 true
가 나오면 저장하지 않는다.
HashSet<Integer> set1 = new HashSet<Integer>();//HashSet생성
HashSet<Integer> set2 = new HashSet<>();//new에서 타입 파라미터 생략가능
HashSet<Integer> set3 = new HashSet<Integer>(set1);//set1의 모든 값을 가진 HashSet생성
HashSet<Integer> set4 = new HashSet<Integer>(10);//초기 용량(capacity)지정
HashSet<Integer> set5 = new HashSet<Integer>(10, 0.7f);//초기 capacity,load factor지정
HashSet<Integer> set6 = new HashSet<Integer>(Arrays.asList(1,2,3));//초기값 지정
여기서 load factor는 HashSet의 전체 사이즈 중 해당 factor 값의 비율만큼 공간을 사용하게 되면 전체 사이즈를 2배 늘리는 연산을 실행하게 된다. 이 공간 확장 연산은 많은 자원을 소모하므로 초기에 저장할 공간을 알고 있다면 미리 지정하는 것이 좋다.
댓글남기기