본문 바로가기
Java

java #3 [ArrayList, LinkedList, SynchronizedList]

by Lee David 2020. 7. 6.
반응형

ArrayList

java Collection 객체에서 제공하는 가장 대표적인 List 형태의 자료구조 입니다.

배열의 값들이 메모리에 이어져 나열됩니다.

ArrayList 특성상 이어 쓰고 읽기에 가장 적합한 구조를 가지고 있습니다.

메모리 상의 ArrayList

LinkedList

ArrayList와는 조금 다르게 각각의 하위 단위의 값들이 다음 값의 주소를 내부적으로 가지고 있습니다.

따라서 서로 이어 쓰거나 중간의 내용을 삭제 할때는 빠른 속도나 안정성이 주어지지만 읽기에는 다음 값의 주소를 찾는 시간 때문에 ArrayList보다 시간이 더 걸리고 데이터가 많아지면 많아질수록 성능은 보장 할 수 없습니다.

 

LinkedList 자료 구조

SynchronizedList

마지막으로 이전 포스트에서 ConcurrentHashMap과 동일하게 멀티 스레드 환경에서 데이터 안전성을 보장하는 자료 구조 입니다. 내용을 읽고 쓰고 지우고 하는데 타 스레드와의 충돌없이 사용 가능합니다.

List list = Collections.synchronizedList(new ArrayList<>());

//...

//사용시에 동기화 시켜 줍니다.
synchronized (list) {
	list.add(...);
}

사용시에는 synchronized 블럭으로 묶어서 사용해야 하는건 동일 하지만 정확한 동기화를 보장해준다는 내용이 문서에 포함 되어 있습니다.

 

*** 문서 (https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#synchronizedList-java.util.List-)

Returns a synchronized (thread-safe) list backed by the specified list. In order to guarantee serial access, it is critical that all access to the backing list is accomplished through the returned list.

 

동기화를 할 때에 속도는 조금 느려지겠지만 Thread safe한 코드를 만드는데 도움이 되었으면 좋겠습니다.

반응형

'Java' 카테고리의 다른 글

[자료구조] Priority Queue는 뭔가요?  (0) 2022.08.18
java #4 [Queue, Dequeue]  (0) 2020.07.08
Java #3 [InputStream]  (0) 2020.06.29
java #2 [HashMap, ConcurrentHashMap]  (0) 2020.06.26
java #1 [concat, +, StringBuffer, StringBuilder]  (0) 2020.06.23