Java 21의 List 신기능

Single Ko·2023년 9월 13일
0

java

목록 보기
26/28

자바21이 나오면서 List에 새로운 기능이 나온다고 한다.

SequencedCollection 라는 인터페이스가 생기고 그 밑에 addFirst() , addLast(), removeFirst(), removeLast() 같은 메서드들이 생긴다고 한다.

이름에서 알 수 있듯이 처음과 끝에 값을 추가하고 삭제 할 수 있다.

SequencedCollection을 상속받은 SequencedSet도 생긴다.
구현 클래스로는 LinkedHashSet, TreeSet

SequencedSet<String> set = new LinkedHashSet<>();
set.add("2");
set.addFirst("3");
set.addLast("1");
set.getFirst(); // "3"
set.getLast(); // "1"
TreeSet<String> set = new TreeSet<>();
set.add("2");
set.add("3");
set.add("1");
//set.addFirst("3"); //미지원
//set.addLast("1");  //미지원

set.first(); // "1"
set.getFirst(); // "1"
set.last(); // "3"
set.getLast(); // "3"

LinkedHashSet은 값을 넣은 순서로 정렬하지만, TreeSet같은경우에는 값을 넣은 순서가 아니라 정렬 순서에 따라 보관해서, addFirst, addLast 를 지원하지는 않는다.

참조 자바21 주요 특징 1 - Sequenced Collection 자바 21에 대한 좀 더 새부적인 정보는 최범균님의 유튜브에 나와있으니 가서 보길 바란다.

다시 돌아와서, 난 자바 21에서 나오는 기능이 궁금해졌다. 그래서 깃헙의 Openjdk에 들어가서 한번 살펴보고, 처음과 끝에 값을 더하고 삭제하고, 가져오는 메서드들만 가져와봤다.

public void addFirst(E e) {
	this.add(0, e);
}

public void addLast(E e) {
	this.add(e);
}

public E getFirst() {
	if (this.isEmpty()) {
    	throw new NoSuchElementException();
	} else {
    	return this.get(0);
	}
}

public E getLast() {
	if (this.isEmpty()) {
    	throw new NoSuchElementException();
	} else {
    	return this.get(this.size() - 1);
	}
}

public E removeFirst() {
	if (this.isEmpty()) {
    	throw new NoSuchElementException();
	} else {
    	return this.remove(0);
	}
}

public E removeLast() {
	if (this.isEmpty()) {
    	throw new NoSuchElementException();
	} else {
    	return this.remove(this.size() - 1);
	}
}  

실제 구현되어 있는 메서드들이였고, 한번 사용해 보고 싶었다. 따라서 간단하게 ArrayList들을 extends받아서 기능들만 빠르게 사용해 보았다.

public class ArrayExtendsList<E> extends ArrayList<E> {
	...위의 구현...
}

  
public class Main {
	public static void main(String[] args) {
        ArrayExtendsList<Integer> list = new ArrayExtendsList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.addLast(6);
        list.addFirst(0);
        System.out.println("list.getFirst() = " + list.getFirst());
        System.out.println("list.getLast() = " + list.getLast());
        System.out.println("list = " + list);
        list.removeFirst();
        list.removeFirst();
        list.removeFirst();
        System.out.println("list = " + list);
    }
}

순서대로 출력값이 원하는 대로 나왔다.
list.getFirst() = 0
list.getLast() = 6
list = [0, 1, 2, 3, 4, 5, 6]
list = [3, 4, 5, 6]

확실히 이렇게 되면
list.get(list.size-1); , list.get(0) 이런 식이 아니라 훨씬 깔끔하게 list.getLast();, list.getFirst() 깔끔하게 잘 나온다.

자바21이 실무에서 사용될려면 언제가 될지는 모르지만, 요즘 자바 버전이 나오는 속도를 보면 실무쪽에서도 의외로 최신 LTS버전의 자바를 빠르게 올려 쓰는 곳도 많은 것을 보면 자바 21을 사용하는 곳도 생각보다 빠르게 나오지 않을까 싶다.

profile
공부 정리 블로그

0개의 댓글