공부 자료/Java

[Java] 배열과 리스트, 무엇을 써야 할까?

미노킴 2022. 11. 19. 13:25

알고리즘 문제를 풀다가 sort 작업을 배열에서 하는게 좋은지, 리스트로 옮긴 후에 진행하는게 궁금해졌다. 그리고 테스트를 하다 보니 변환 작업은 각각 얼마나 시간이 걸리는지, 그리고 어떨 때 변환을 하는게 좋고 어떨 때 안하는게 좋을 지 궁금해져서 관련된 모든 작업을 테스트해 보았다. 글 마지막에 어떤 상황에서 배열을 쓰고 어떤 상황에서 리스트를 써야할 지 정리해 두었다. 각 작업에서 가장 빠른걸 bold 처리 해두었다.

 

1. 정렬(sort)

배열과 ArrayList, LinkedList의 sort 시간을 살펴보았다. 길이가 100만인 int배열과 String 배열로 테스트 해 보았다.

int 배열

배열에서 sort: 5ms

ArrayList에서 sort: 9ms

LinkedList에서 sort: 40ms

String 배열

배열에서 sort: 19ms

ArrayList에서 sort: 10ms

LinkedList에서 sort: 50ms

2. 배열<->리스트 변환

정렬과 마찬가지로 길이가 100만인 int배열과 String 배열로 테스트 해 보았다.

int 배열

배열 -> ArrayList: 23ms

ArrayList -> 배열: 13ms

 

배열 -> LinkedList: 111ms

LinkedList -> 배열: 24ms

String 배열

배열 -> ArrayList: 0ms

ArrayList -> 배열: 2ms

 

배열 -> LinkedList: 76ms

LinkedList -> 배열: 16ms

3. 결론

1. 리스트를 사용할 때는 웬만해선 ArrayList를 사용하자. 변환하는 속도 차이가 굉장히 심하다. LinkedList가 그 속도를 역전하려면 삽입과 삭제가 굉장히 많이 일어나야 할 듯. (이건 추가 실험이 필요함.)

 

2. int 자료형은 최대한 배열 내에서 작업하는 것이 좋다. 아마 원시 자료형들에 공통된 내용일 것 같다. 리스트로 변환하는 것도 꽤 시간이 걸리기 때문에, 불가피한 경우가 아니라면 배열에서 작업하자.

 

3. String은 배열에서 하지 말고 ArrayList로 작업하자. 리스트로 변환하거나 리스트에서 다시 배열로 변환하는 시간이 거의 0에 가깝다. 심지어 String 정렬은 배열에서 하는거보다 리스트에서 하는 것이 더 빠르다..ㄷㄷ