배열 목록과 연결된 목록의 차이점 차이점

Anonim

데이터는 어떻게 저장됩니까?

Array list와 Linked list는 데이터 저장 및 검색과 관련하여 일반적인 용어입니다. 많은 저장 장치가 있지만 궁극적으로 저장 장치에 의존합니다. 이 두 가지 저장 메커니즘은 데이터를 저장 장치에 저장하고 필요한 경우 검색합니다. 데이터를 메모리에 저장하는 방법을 살펴 보겠습니다. 배열 목록은 순차 저장소를 사용하며 데이터 조각은 차례로 저장됩니다. 이것은 아마도 더 간단한 저장소 형태 일 것입니다 - 혼란을 피하십시오. 예, 배열 목록의 다음 메모리 위치에서 다음 항목이나 데이터를 검색 할 수 있습니다. 그러나 링크 된 목록의 포인터를 사용하여 저장됩니다. 여기서 우리는 저장을위한 두 개의 메모리 위치가 필요합니다 - 하나는 데이터 용이고 다른 하나는 포인터 용입니다. 포인터는 다음 데이터의 메모리 위치를 지정합니다. Linked list는 데이터를 순차적으로 저장하지 않는다는 것을 쉽게 이해할 수 있습니다. 오히려 임의 저장 메커니즘을 사용합니다. 포인터는 메모리의 데이터 위치를 찾는 핵심 요소입니다.

->

동적 배열 및 링크 된 목록

이미 두 저장 메커니즘이 데이터를 저장하는 방법에 대해 논의했으며 Array 목록의 내부 저장 체계에 '동적 배열'이라는 용어를 사용할 수 있습니다. 데이터 조각을 하나씩 다른 이름 뒤에 붙이면 - 링크 된 목록은 포인터를 사용하여 내부 목록을 사용하여 다음 항목을 추적합니다. 따라서 내부 링크 된 목록 (예: 단일 또는 이중 링크 목록)을 사용하여 다음 데이터를 표시합니다.

->

메모리 사용량

배열리스트에는 실제 데이터 만 저장되므로 저장하는 데이터의 공간 만 필요합니다. 반대로 Linked 목록에는 포인터도 사용됩니다. 따라서 두 개의 메모리 위치가 필요하며 링크 된 목록은 Array 목록보다 많은 메모리를 사용한다고 말할 수 있습니다. 링크 된 목록의 장점은 배열 목록과 달리 데이터를 저장하는 데 연속적인 메모리 위치가 필요하지 않습니다. 포인터는 다음 데이터 위치의 위치를 ​​유지할 수 있으며 연속되지 않은 더 작은 메모리 슬롯을 사용할 수도 있습니다. 메모리 사용량에 관해서는 포인터가 링크 된 목록의 주된 역할을하며 포인터의 효과도 있습니다.

->

초기 배열 목록과 링크 된 목록의 크기

배열 목록에서 빈 목록이라도 크기가 10이지만 Linked 목록을 사용하면 큰 공간이 필요하지 않습니다. 나중에 크기가 0 인 빈 Linked 목록을 만들 수 있습니다. 나중에 필요할 때 크기를 늘릴 수 있습니다.

데이터 검색

순차적으로 저장되는 배열 목록에서 데이터 검색이 더 간단합니다. 첫 번째 데이터 위치를 확인하는 것뿐입니다. 거기에서 다음 위치가 순차적으로 액세스되어 나머지를 검색합니다.첫 번째 데이터 위치 + 'n'과 같이 계산합니다. 여기서 'n'은 배열 목록에있는 데이터의 순서입니다. 링크 된 목록은 첫 번째 데이터 위치를 찾기위한 초기 포인터를 참조하고 거기에서 다음 데이터 위치를 찾기 위해 각 데이터와 연결된 포인터를 참조합니다. 검색 프로세스는 주로 여기 포인터에 의존하며, 다음 데이터 위치를 효과적으로 보여줍니다.

데이터 끝

배열 목록은 널 값을 사용하여 데이터의 끝을 표시하지만 링크 된 목록은이 목적으로 널 포인터를 사용합니다. 시스템이 널 데이터를 인식하자마자 배열 목록은 다음 데이터 검색을 중지합니다. 비슷한 방식으로 널 포인터는 시스템이 다음 데이터 검색을 진행하는 것을 중지시킵니다.

Reverse Traversal

Linked list는 descendingiterator ()의 도움으로 역방향으로 순회 할 수있게합니다. 그러나 우리는 Array 목록에 그러한 기능을 가지고 있지 않습니다. 역방향 탐색은 여기에서 문제가됩니다.

구문

두 저장소 메커니즘의 Java 구문을 살펴 보겠습니다.

배열리스트 생성:

List arraylistsample = new ArrayList ();

배열 목록에 개체 추가:

Arraylistsample. add ("name1");

Arraylistsample. add ("name2");

결과 배열리스트가 - [name1, name2]처럼 보입니다.

링크 된 목록 생성:

List linkedlistsample = new linkedList ();

링크 된 목록에 개체 추가:

Linkedlistsample. add ("name3");

링크 된 샘플. add ("name4");

결과 연결된 목록이 - [name3, name4]처럼 보입니다.

Get 또는 Search 작업에서 더 나은 점은 무엇입니까?

배열 목록은 데이터 검색을 실행하는 데 O (1) 시간이 걸리는 반면, 연결된 목록은 n 데이터 검색에 대해 O (n)을 사용합니다. 따라서 Array 목록은 항상 모든 데이터 검색에 일정 시간을 사용하지만 Linked 목록에서는 취해진 시간이 데이터의 위치에 따라 다릅니다. 따라서 배열 목록은 항상 가져 오기 또는 검색 작업에 더 적합한 선택입니다.

삽입 또는 더하기 연산에 더 좋은 것은 무엇입니까?

Array 목록과 Linked List 모두 데이터 추가를 위해 O (1) 시간이 소요됩니다. 그러나 배열이 꽉 차 있다면 배열 목록에는 크기를 조정하고 항목을 새로운 것으로 복사하는 데 상당한 시간이 걸립니다. 이 경우 연결된 목록이 더 나은 선택입니다.

제거 작업을 위해 어느 것이 더 낫습니까?

제거 작업은 Array 목록과 Linked 목록에서 거의 동일한 시간이 걸립니다. 배열 목록에서이 작업은 데이터를 삭제 한 다음 데이터의 위치를 ​​이동하여 새로운 배열을 만듭니다. O (n) 시간이 걸립니다. 링크 된 목록에서이 작업은 특정 데이터로 이동하고 포인터 위치를 변경하여 최신 목록을 구성합니다. 탐색 및 제거 시간은 여기서도 O (n)입니다.

어느 것이 더 빠릅니까?

Array 목록은 내부 배열을 사용하여 실제 데이터를 저장한다는 것을 알고 있습니다. 따라서 어떤 데이터가 삭제되면 앞으로 나오는 모든 데이터는 메모리 이동이 필요합니다.분명히 상당한 시간을 필요로하고 작업 속도가 느려집니다. 링크 된 목록에는 포인터 위치를 변경하는 것과 같은 메모리 이동이 필요하지 않습니다. 따라서 연결된 목록은 모든 종류의 데이터 저장소에있는 배열 목록보다 빠릅니다. 그러나 이는 순수하게 작동 유형에 달려있다. 이자형. 가져 오기 또는 검색 작업의 경우 연결된 목록에 배열 목록보다 훨씬 많은 시간이 소요됩니다. 전반적인 실적을 살펴보면 링크 된 목록이 더 빠르다고 말할 수 있습니다.

배열 목록과 연결된 목록을 사용하는 경우?

배열 목록은 연속적인 메모리를 사용할 수있는 소규모 데이터 요구 사항에 가장 적합합니다. 그러나 막대한 양의 데이터를 처리 할 때 연속 메모리의 가용성은 작거나 큰 데이터 저장 메커니즘을 구현합니다. 그런 다음, 선택할 목록 - 배열 목록 또는 링크 된 목록 -을 결정하십시오. 데이터 저장 및 검색 만 필요할 때 배열 목록을 사용할 수 있습니다. 그러나 목록은 데이터를 조작하여 그 이상으로 당신을 도울 수 있습니다. 데이터 조작이 필요한 빈도를 결정한 후에는 보통 수행하는 데이터 검색 유형을 확인하는 것이 중요합니다. 가져 오기 또는 검색 만하면 배열 목록이 더 좋습니다. 삽입 또는 삭제와 같은 다른 작업의 경우 링크 된 목록으로 이동하십시오.

표 형식의 차이점을 살펴 보겠습니다. S. Array List

링크 된 목록 1 데이터 저장 방식
순차적 데이터 저장 사용 비 순차적 데이터 저장 사용
개념 내부 스토리지 스키마 내부 동적 배열 유지 링크 된 목록 유지
메모리 사용 데이터 만위한 메모리 공간 필요 데이터를위한 메모리 공간 필요 포인터 4
초기 목록의 크기 10 개 이상의 항목에 필요한 공간 공간이 필요하지 않으며 크기가 0 인 빈 연결된 목록을 만들 수도 있습니다. 5
데이터 검색 첫 번째 데이터 위치 + 'n'과 같이 계산합니다. 여기서 'n'은 배열 목록에있는 데이터의 순서입니다. 첫 번째 또는 마지막 행부터 필요한 데이터가 필요할 때까지 탐색 6 < End of Data
Null 값은 끝을 표시합니다. Null Pointer는 끝을 표시합니다. 7 Reverse Traversal
허용하지 않습니다. descendingiterator의 도움으로) 8 목록 작성 구문
List arraylistsample = new Array 목록 (); List linkedlistsample = new linkedList (); 9 객체 추가
Arraylistsample. add ("name1"); 링크 된 샘플. add ("name3"); 10

가져 오기 또는 검색

O (1) 시간이 걸리며 성능이 향상됩니다. O (n) 시간이 걸리며 성능은 데이터의 위치에 따라 달라집니다. 11

삽입 또는 추가

배열이 꽉 찬 경우를 제외하고는 O (1) 시간 소비 모든 상황에서 O (1) 시간 소모 12 삭제 또는 제거
O (n) O (n) 시간 소요 13 언제 사용 하는가? Get 또는 검색 조작이 많은 경우. 시작시에도 메모리 가용성이 높아야합니다.
많은 삽입 또는 삭제 작업이 있고 메모리 가용성이 연속적 일 필요가없는 경우