Vector
Vector는 배열의 동적인 사용을 위해 제공되는 클래스
내부적으로 synchronized를 통해 구현되어 있기 때문에 동기화를 보장.
ArrayList와 LinkedList는 List 인터페이스를 구현한 Collection 구현체이다.
List 인터페이스는 기본생성시 동기화를 보장하지 않지만 동기화가 필요한 환경에서는 Collections 클래스를 통해 동기화를 보장할 수 있음.
Collection.synchronizedList(List<T> list);
동기화란?
자바에서 동기화란 여러 개의 스레드가 한 개의 자원을 사용하고자 할 때 해당 스레드만 제외하고 나머지는 접근을 못하도록 막는 것.
ArrayList
내부적으로 데이터를 배열에서 관리하며 추가, 삭제 시 임시 배열을 생성하여 데이터를 복사하는 구조.
그렇기에 많은 자료를 추가, 삭제할 시 메모리 소모가 크고, 시간이 오래걸려 성능 저하가 발생.
사이즈가 고정되어 있기에 사이즈를 초과할 시 사이즈가 늘어난 배열을 생성하여 데이터를 옮겨야하기에
복잡한 연산과 메모리가 필요하다는 단점이 있다.
그래도 내부적으로 배열로 관리하기 때문에 데이터마다 인덱스를 가지고 있어 검색에 뛰어나다.
그렇다면 왜 안드로이드에서 ArrayList를 많이 사용할까?
이건 지극히 내 생각이지만... 범용적으로 많이 쓰이다 보니 많이 쓰이는 것이 아닐까하는,,,
사실 추가,삭제에 대해 위에서 말한 단점들이 있다고는 하나 실제로는 성능상 많은 차이를 낼 만한 데이터를 잘 다루지도 않기에???라고 생각한다.
LinkedList
데이터를 노드에 저장하고 노드간 양방향 연결을 통해 데이터를 추가, 삭제하는 구조이다.
따라서 추가, 삭제가 빠른 장점이 있지만, 검색 시 노드를 처음부터 순회해야 하기 때문에 비교적 느리다는 단점이 있다.
'gyub's 공부일기 > 그저 내 공부' 카테고리의 다른 글
제네릭 (0) | 2021.04.01 |
---|---|
Iterator (0) | 2021.04.01 |
String Literal (0) | 2021.04.01 |
Activity LifeCycle (0) | 2021.03.31 |
View Lifecycle (0) | 2021.03.31 |