ArrayList는 배열을 기반으로 구현되어 C언어에서 메모리를 동적으로 적용하고 메모리를 동적으로 늘리는 것과 유사하게 자동으로 용량을 늘릴 수 있는 동적 배열입니다. LinkedList는 양방향 순환 연결 목록(소스 코드에서 쉽게 볼 수 있듯이)을 기반으로 구현됩니다. 연결 목록으로 작동하는 것 외에도 스택, 대기열 및 이중 종료 대기열로도 사용할 수 있습니다.
1. List 소개
2. ArrayList의 기능
ArrayList
ArrayList는 기반입니다. on Array 구현 은 동적 배열 이며, 용량이 자동으로 증가할 수 있습니다 . 이는 C 언어에서 동적으로 메모리를 적용하고 메모리를 동적으로 늘리는 것과 유사합니다.
ArrayList는 스레드에 안전하지 않습니다. , 은 단일 스레드 환경에서만 사용할 수 있습니다. , Collections.synchronizedList를 다중 스레드 환경 (목록 목록) 함수는 스레드로부터 안전한 ArrayList 클래스를 반환하거나 동시 패키지 아래의 CopyOnWriteArrayList 클래스를 사용할 수 있습니다.
ArrayList는 직렬화 가능 인터페이스를 구현하므로 직렬화를 지원합니다. 은 직렬화를 통해 전송할 수 있습니다.
ArrayList는 RandomAccess 인터페이스를 구현하여 빠른 무작위화 액세스를 지원합니다. 실제로는 아래 첨자 일련 번호를 통한 빠른 액세스
복제 가능 인터페이스를 구현하고 복제 가능
#🎜 🎜#참고 세 가지 다른 건축 방법. 매개변수 없는 생성자에 의해 생성된 ArrayList의 용량은 기본적으로 10입니다. Collection 매개변수가 있는 생성자는 Collection을 배열로 변환하고 이를 ArrayList 구현 배열 elementData에 할당합니다. 용량확장 방식에 주의하여 용량을 확보하세요. 요소가 ArrayList에 추가될 때마다(1개 또는 그룹일 수 있음) 충분한 용량을 보장하기 위해 이 메서드를 호출해야 합니다. 용량이 현재 요소 수를 수용하기에 충분하지 않은 경우 새 용량은 이전 용량의 1.5배에 1을 더한 값으로 설정됩니다. 설정된 새 용량이 충분하지 않은 경우 새 용량은 전달된 매개변수(즉, 필요한 용량), Arrays.copyof() 메서드를 사용하여 요소를 새 배열에 복사합니다(자세한 내용은 아래 3번 항목 참조). 이를 통해 알 수 있듯이, 요소가 추가될 때마다 원래 요소를 새로운 배열에 복사해야 하므로 시간이 많이 소요되므로 ArrayList를 사용할 경우에만 사용하는 것이 좋습니다. 요소 수는 미리 결정될 수 있습니다. 그렇지 않으면 LinkedList를 사용하는 것이 좋습니다. ArrayList 구현에서는 수많은 Arrays.copyof() 및 System.arraycopy() 메서드를 호출합니다. 우리는 이 두 가지 방법의 구현에 대해 심층적으로 이해하는 것이 필요합니다. 먼저 Arrays.copyof() 메서드를 살펴보겠습니다. 오버로드된 메서드가 많지만 구현 아이디어는 동일합니다. 일반 버전의 소스 코드를 살펴보겠습니다.public static <T> T[] copyOf(T[] original, int newLength) { return (T[]) copyOf(original, newLength, original.getClass()); }
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
public static Integer[] vectorToArray2(ArrayList<Integer> v) { Integer[] newText = (Integer[])v.toArray(new Integer[0]); return newText; }
ArrayList基于数组实现,可以通过下标索引直接查找到指定位置的元素,因此查找效率高,但每次插入或删除元素,就要大量地移动元素,插入删除元素的效率低。
在查找给定元素索引值等的方法中,源码都将该元素的值分为null和不为null两种情况处理,ArrayList中允许元素为null。
三、LinkedList
LinkedList的特点
LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用;
LinkedList同样是非线程安全的,只在单线程下适合使用;
LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输;
实现了Cloneable接口,能被克隆;
相关推荐:
视频教程:
위 내용은 Java 목록: ArrayList 및 LinkedList 구현 인터페이스에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!