<img alt="pasteImage.png" pathname="PCIO6Z190223204030.PNG" src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/PCIO6Z190223204030.PNG" style="border-style:solid; border-width:0px; width:400px" title="pasteImage.png" />

<br/>

자바 컬렉션 중 LinkedList, ArraryList가 있습니다.

List 인터페이스를 구현하였으므로, List로 업캐스팅이 가능합니다.

둘의 차이점을 알 필요가 있을거 같습니다.

<br/>

<br/>

<hr />
<br/>

LinkedList는 다음과 같습니다.

명칭과 같이 연결 링크를 이용합니다. 값을 가지고 있고 다음 노드를 가리키는 포인터를 가집니다.

<br/>

**A -> B -> C **같은 구조 입니다.

A는 B를 가리키는, B는 C를 가리키는 포인터를 가지고 있습니다.

<br/>

그럼 삽입/삭제 연산은 어떨까요.

B를 삭제하면

A -> C 로 구조가 바뀝니다. 단순히 A가 C 노드를 가리키게 하면 쉽게 처리됩니다.

그럼 D를 A와 C사이에 넣는다면,

**A -> D -> C 구조로 바뀝니다. **A가 D를 가리키고, D가 C를 가리키면 됩니다.

즉 삽입/삭제가 상대적으로 쉽습니다.

<br/>

그럼 검색은 어떨까요..?

**A -> B -> C-> D-> E -> ~~ ->Z **구조에서 K번째 값을 찾는다면 어떻게 해야할까요.

A부터 시작해서 가리키는 노드를 차근 차근 따라가며 K번째 값을 찾아야 합니다.

<br/>

<hr />
<br/>

ArrayList는 다음과 같습니다.

명칭에 따라, 내부적으로 배열을 이용한 리스트입니다.

예를들어, 배열안에 **A B C D **가 나란히 있는 구조입니다.

<br/>

그럼 삭제 연산은 어떨까요?

B를 삭제 한다면

A NULL C D 가 되고 ,

B자리에 C를 C자리에 D를 옮겨야 A C D 로 완성됩니다.

<br/>

그럼 삽입 연산은 어떨까요?

A 와 B 사이에 K를 넣는다면,

B자리에 K가 들어가고, B C D는 한칸씩 뒤로 옮겨야겠죠.

그래야 A K B C D가 완성됩니다.

<br/>

또한 배열은 고정적인 길이를 가집니다.

삽입을 계속하면, 내부적으로 더 긴 배열을 가지도록 재조정 연산을 수행합니다.

즉 ArrayList는 삽입/삭제에 비효율적입니다.

<br/>

검색은 어떨까요. K번째의 값을 찾을때 입니다.

내부적으로 배열이기때문에 인덱스값만 안다면, 쉽게 찾을 수 있습니다.

bigO(1) 시간복잡도로 바로 찾을 수 있습니다.

<br/>

<hr />
<br/>

사실 학부시절에 다 배운 내용임에도 불구하고, 개발과정에서는 두 컬렉션을 구분없이 쓸때가 많습니다.

반성하고 좀 더 효율적인 코딩이 될 수 있도록 공부해봅니다..👀

<br/>

<br/>

<br/>

참고

<a href="http://www.nextree.co.kr/p6506/">http://www.nextree.co.kr/p6506/</a>

<br/>

0
이전 댓글 보기
등록
TOP