동일한 기능을 코딩하는 다양한 방법을 비교하기 위해 새 스레드를 시작합니다. 이 게시물에서는 요소가 하나만 있는 간단한 목록을 만드는 두 가지 일반적인 방법을 비교해 보겠습니다. 특히 가장 일반적으로 사용되는 List 구현 생성자와 단일 요소를 포함하는 불변 목록을 생성하기 위한 간단한 팩토리 메소드인 Collections.singletonList를 살펴보겠습니다.
초기 용량을 지정하지 않고 ArrayList를 초기화할 때마다 빈 배열로 시작됩니다. 첫 번째 요소를 추가하면 ArrayList는 배열 복사와 관련된 상대적으로 어려운 알고리즘을 사용하여 크기를 조정합니다. ArrayList 구조를 살펴보겠습니다.
private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } public boolean add(E e) { modCount++; add(e, elementData, size); return true; } private void add(E e, Object[] elementData, int s) { if (s == elementData.length) elementData = grow(); elementData[s] = e; size = s + 1; } private Object[] grow() { return grow(size + 1); } private Object[] grow(int minCapacity) { return elementData = Arrays.copyOf(elementData, newCapacity(minCapacity)); } private int newCapacity(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity 1dd8f35ec60ef868cd5d4aa1a0524009 목록8742468051c85b06f0a0af9e3e506b5c 싱글턴리스트(T o) <h3> 설명 </h3> <p>이 메소드는 지정된 객체만 포함하는 변경 불가능한 목록을 반환합니다. Java 1.3에 도입된 SingletonList에는 다음과 같은 몇 가지 장점이 있습니다.</p> <ol> <li> <strong>인라인 구현:</strong> 한 줄에 원하는 요소로 초기화할 수 있습니다.</li> <li> <p><strong>불변성:</strong> 구현을 살펴보겠습니다.<br> </p> <pre class="highlight java">private static class SingletonList<E> extends AbstractList<E> implements RandomAccess, Serializable { private final E element; SingletonList(E obj) { element = obj; } ... }
SingletonList가 상속하는 AbstractList는 다음과 같이 변경 가능한 모든 메서드를 정의합니다.
public boolean add(E e) { add(size(), e); return true; } public void add(int index, E element) { throw new UnsupportedOperationException(); } public E remove(int index) { throw new UnsupportedOperationException(); } public E set(int index, E element) { throw new UnsupportedOperationException(); }
이렇게 하면 목록의 크기나 단일 요소의 내용을 변경하는 것이 불가능해집니다.
불변성은 매우 유리한 기능입니다. 여기서 자세히 다루지는 않겠지만 관심 있는 개발자는 이 기사에서 자세한 내용을 알아볼 수 있습니다.
메모리 할당: SingletonList 클래스에는 단일 요소를 수용하기 위한 하나의 단순 필드만 포함되어 있습니다. ArrayList는 간단한 ArrayList 단순 생성자를 사용하여 배열을 남기는 배열을 사용합니다. 요소 추가 후 크기가 10입니다.
CPU 사용량: SingletonList 생성자는 단일 요소를 매개변수로 허용하므로 크기 조정, 배열 복사 또는 조작이 필요하지 않습니다. 이는 ArrayList 추가 방법에 비해 훨씬 더 효율적입니다.
이 게시물에서는 ArrayListconstructor와 Collection.singletonList 메서드를 사용하여 단일 요소로 간단한 목록을 만드는 두 가지 방법을 비교했습니다. ArrayList는 유연하고 일반적으로 사용되는 데이터 구조이지만, 특히 요소를 추가할 때 메모리 할당 및 CPU 사용량 측면에서 불필요한 오버헤드가 발생합니다. 이 오버헤드에는 배열 크기 조정 및 복사가 포함되며, 이는 하나의 요소만 보유하는 목록에 대해 중복될 수 있습니다. 하지만 이 요소를 변경해야 한다면 ArrayList가 적합한 솔루션입니다.
반면 Collection.singletonList는 단일 요소 목록을 생성하는 데 더 효율적인 대안을 제공합니다. 이 방법은 더 간결하고 사용하기 쉬울 뿐만 아니라 불변성을 보장하므로 많은 시나리오에서 중요한 이점이 될 수 있습니다. ArrayList에 비해 메모리 공간이 최소화되고 CPU 리소스가 거의 필요하지 않습니다.
요약하자면, 하나의 요소만 포함하는 간단하고 변경 불가능한 목록의 경우 효율성, 단순성 및 불변성으로 인해 Collection.singletonList가 탁월한 선택입니다. 그러나 목록의 요소를 수정해야 하는 경우 ArrayList를 선택하는 것이 더 적절할 수 있습니다.
다음 게시물에서는 단일 요소 목록에 대한 또 다른 대안인 List.of 팩토리 메소드를 비교해 보겠습니다. 나중에 봐요!
위 내용은 [코드 비교] ArrayList와 Collections.singletonList 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!