스터디 노트
자바 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이 추가되면서 첫번째나 마지막 인덱스 원소 접근을 명시적으로 할 수 있게 되었다.