반응형
Notice
Recent Posts
Recent Comments
Link
뜌릅
ARRAY & ARRAYLIST & LINKEDLIST 본문
반응형
특징
- Array와 ArrayList는 LinkedList와 다르게 메모리가 연속적인 특징을 갖고있다.
- Array와 ArrayList의 차이는 할당된 메모리의 크기가 가변적인지 아닌지의 차이를 갖고있다. Array는 고정된 메모리가 할당되고, ArrayList는 메모리를 동적으로 할당할 수 있다. 자바에서는 크기가 가득찰 경우, 1.5배 증가한다.
- LinkedList는 단일, 다중 여러가지 종류가 존재한다. 한 노드에 연결될 노드의 포인터 위치를 가리키는 방식으로 되어있다.
장단점
위와 같은 자료구조적인 특징 때문에 장단점에서의 차이가 생기게 된다.
- Array: 배열은 선언할 때 크기와 데이터 타입을 지정해야 한다. 따라서 최대 사이즈를 알 수 없을때는 부적합하며, 중간에 데이터를 삽입하거나 삭제할 때도 매우 비효율적이다. 단 index을 통하여 random access가 가능하다. 추가적으로 space locality의 측면에서 Cache Hit Rate가 높아진다.
- ArrayList: ArrayList는 배열처럼 크기를 정해주지 않아도 된다. C++에서는 vector, Java에서는 list or ArrayList가 일반적이다. 이 녀석은 크기가 가변적이지만, 여전히 중간에 데이터 삽입 및 삭제에는 불리하다.
- LinkedList는 중간에 데이터 삽입 및 삭제는 전체를 돌지 않아도 빠르게 진행이 가능하다. 또 동적 크기도 가능하다 또한 Array와 다르게 메모리의 낭비도 없을것이다. 하지만, Search를 할때는 비효율적이다. 또한 포인터의 여분 공간이 노드마다 필요하고 Cache Hit Rate도 낮을 것이다.
코틀린에서의 인터페이스 & 구현체
대충 위와 같다. 종류가 매우 많지만, 하나씩 뜯어보겠다.
먼저 Array<Int> IntArray의 차이는 무엇일까?:
결론부터 말하자면 IntArray가 약간 좋다. 자바 사용자들을 위해 코드를 작성하자면, 아래와 같은 차이가 난다.
// 코틀린 코드
fun main() {
val a = IntArray(5)
val b = Array<Int>(5) { 0 }
}
// 위 코틀린 코드를 자바로 변환시
public static final void main() {
int[] a = new int[5];
Integer[] b = new Integer[5];
}
Int와 Integer의 차이는 Boxing과 Unboxing이다. int는 Premitive이고 Integer은 Int의 Wrapper 클래스이다. int에서 Integer로 변환은 Boxing과정이라고 한다. 반대의 과정은 Integer.valueOf()을 호출해서 진행된다. 즉 호출 비용이 발생한다. 또 초기화에서의 차이도 존재하는데, 이 때문에 IntArray을 애용하는게 좋다.
list와 mutableList의 차이:
Read-Only인지 아닌지의 차이이다.
mutableList와 ArrayList의 차이는 무엇일까?:
둘다 동일하다고 하다. 다만 후에 갈라질수 있어서 표기명의 차이가 있다고 한다.
반응형
'자료구조' 카테고리의 다른 글
해시 Hash 자료구조 (0) | 2023.10.12 |
---|---|
STACK&QUEUE (1) | 2023.10.10 |
자료구조(3) 단순 연결 리스트 (0) | 2020.12.18 |
자료구조(2) : 선형 리스트의 응용 및 구현 (0) | 2020.12.15 |
자료구조(1) : 순차 자료구조와 선형 리스트 (1) | 2020.12.15 |