-
자바 21 특징 - SequencedCollection스터디 노트 2023. 10. 10. 22:35
원본 URL : https://youtu.be/EUDnGF6mHjE?si=6HzI6_scGlrD9F3o
자바 21 이전의 코드
List에서 첫 번째, 마지막 원소를 구하려면 아래와 같이 구해야 한다.
List<String> list = new ArrayList<>(); String first = list.get(0); String last = list.get(list.size() - 1);
자바 21에서는 SequencedCollection이 추가되었음.
이를 통해 첫 번째, 마지막 번째 원소에 접근하여 작업할 수 있는 기능이 추가되었음.
그리고 역순으로 조회하기 기능이 추가되었음.
public interface SequencedCollection<E> extends Collection<E> { void addFirst(E e); void addLast(E e); E getFirst(); E getLast(); E removeFirst(); E removeLast(); SequencedCollection<E> reversed(); }
위 인터페이스를 구현하고 있는 구현체를 선택하면 위의 메소드들을 이용할 수 있음.
ArrayList는 위의 SequencedCollection을 구현하고 있는 구현체로 해당 기능들을 사용할 수 있음.
List<String> col = new ArrayList<>(); col.add("2"); col.addFirst("1"); col.addLast("3"); col.removeFirst(); col.removeLast();
SequencedCollection 뿐만 아니라 SequencedSet도 있음.
이 SequencedSet은 SequencedCollection을 상속받고있음. 단, reversed() 메서드의 리턴타입만 SequencedSet으로 변경.
구현 클래스는 LinkedHashSet, TreeSet이 있고 TreeSet에선 addFirst()와 addList()는 지원하지 않음.
// SequencedSet SequencedSet<String> set = new LinkedHashSet<>(); set.add("2"); set.addFirst("3"); set.addList("1"); set.getFirst(); // 3 set.getLast(); // 1 // TreeSet TreeSet<String> set = new TreeSet(); set.add("2"); set.add("3"); set.add("1"); // addFirst와 addLast는 미지원 set.first(); // 1 set.getFirst(); // 1 set.last(); // 3 set.getLast(); // 3
SequencedMap도 있으며 구현체로는 역시 LinkedHashMap과 TreeMap이 있음.
public interface SequencedMap<K, V> extends Map<K, V> { SequencedMap<K, V> reversed(); Map.Entry<K, V> firstEntry(); Map.Entry<K, V> lastEntry(); Map.Entry<K, V> pollFirstEntry(); Map.Entry<K, V> pollLastEntry(); V putFirst(K k, V v); V putLast(K k, V v); SequencedSet<K> sequencedKeySet(); SequencedCollection<V> sequencedValues(); SequencedSet<Map.Entry<K, V>> sequencedEntrySet(); }
reserved() 메소드는 순서만 반대로 제공하는 컬렉션에 대한 뷰를 리턴하며 새 컬렉션을 생성하지 않는다.
한 마디로 정리하면, 자바 21에 SequencedCollection이 추가되면서 첫번째나 마지막 인덱스 원소 접근을 명시적으로 할 수 있게 되었다.
'스터디 노트' 카테고리의 다른 글
[Java] IntStream 메소드 사용해보기 (0) 2023.10.16 자바 JDK 9 부터 JDK17까지의 주요 코딩 특징 (0) 2023.10.12 [Java] 객체 필드 Validation 손쉽게 구현하기 (feat. Bean Validation & @NotNull) (0) 2023.10.12 자바 21 특징 - 가상 쓰레드 (1) 2023.10.09 자바스크립트 코드 프로처럼 쓰는 팁 (1) 2023.10.08