LinkedHashSet — 삽입 순서를 유지하는 집합
LinkedHashSet — 삽입 순서를 유지하는 집합
LinkedHashSet<E>는 잘 정의된 만남 순서(encounter order)를 가진 Set 인터페이스의 해시 테이블 + 연결 리스트 구현이에요. HashSet과 달리 모든 항목을 통과하는 이중 연결 리스트를 유지해요. 이 연결 리스트가 만남 순서(순회 순서)를 정의하는데, 요소가 집합에 삽입된 순서(삽입 순서)예요.
본문
public class LinkedHashSet<E> extends HashSet<E>
implements SequencedSet<E>, Cloneable, Serializable
가장 오래된 요소가 먼저, 가장 최근 요소가 마지막이에요. add로 요소를 다시 삽입해도 만남 순서는 바뀌지 않아요. addFirst/addLast로 이미 있는 요소의 순서를 바꿀 수 있어요.
이 구현은 HashSet의 불명확한 순서를 피하면서도 TreeSet에 비해 추가 비용이 없어요. 원본 집합의 구현과 무관하게 같은 순서의 복사본을 만들 수 있어요. 모든 선택적 Set/SequencedSet 연산을 제공하고 null 요소를 허용해요. 기본 연산(add, contains, remove)은 HashSet처럼 상수 시간이며, 연결 리스트 유지 비용 때문에 성능은 HashSet보다 약간 낮을 수 있어요.
생성자
LinkedHashSet(int initialCapacity, float loadFactor)/LinkedHashSet(int initialCapacity)/LinkedHashSet()/LinkedHashSet(Collection c)— 각각 지정된 크기·로드 팩터 또는 지정된 컬렉션의 요소로 만듭니다.
순서 관련 메서드
addFirst(E e)/addLast(E e)— 요소를 만남 순서의 처음/끝에 추가해요.getFirst()/getLast()— 첫/마지막 요소를 반환해요.removeFirst()/removeLast()— 첫/마지막 요소를 제거하고 반환해요.reversed()— 반대 순서의SequencedSet뷰를 반환해요.
기타
spliterator()— late-binding이고 fail-fast인Spliterator를 만들며SIZED,DISTINCT,ORDERED특성을 보고해요.newLinkedHashSet(int numElements)— 기대 요소 수에 알맞은 빈 집합을 만들어요.