본문 바로가기
JAVA

[JAVA, 자료구조] Array(배열)와 List(리스트)의 차이(+그리고 ArrayList는?)

by lumayi 2021. 10. 6.

요즘 코딩테스를 공부중인데 문법을 따로 공부하는 것보다

오히려 문제를 풀면서 문법과 자료구조에 대해 더 잘 알게되는 것 같다!

 

오늘 코테 풀이에서는 어떨 때는 String[] str 배열로 쓰고,

어떨 때는 ArrayList<> str로 쓰는 것을 발견했다.

 

그러나 왜 굳이 이렇게 다르게 쓰는지 알 수가 없어서 공부를 했다!

 

일단 두 개념의 뜻을 알아보자!

 

Array(배열)의 뜻은?

여러 개의 데이터를 하나의 이름으로 그룹핑해서 관리 하기 위한 자료구조이다.

 

그러면

List(리스트)의 뜻은?

리스트도 배열과 같이 데이터를 그룹핑해서 관리하기 위한 것이지만,

Array(배열)와는 다른 점이 있다!

 

 

큰 차이점들을 일단 정리해보자면 이러하다!

 

  저장 방식 크기 할당 속도
Array(배열) 정해진 공간이 있고,
그 모든 곳의
식별자(인덱스)가 존재
ex) str[i]
객체생성시 크기 할당 필수
ex) char[] c = new char[3]
삽입/삭제: 느림
데이터조회: 빠름
List(리스트) 식별자(인덱스)가 없음,
앞의 요소가 삭제되면
새로 추가되는 요소가
그 공간에 저장될 수 있음
크기 할당 필요X
(자바에선
자동으로 1.5배씩 늘어남)
삽입/삭제: 빠름
데이터조회: 느림

 

제일 큰 차이는 배열은 크기 할당을 꼭 해줘야하고,

리스트는 그럴 필요가 없다는 것 같다!

 

언뜻보면 그럼 리스트가 더 좋은거아냐? 싶겠지만

쓰지 않는 메모리할당이 더 많아지기 때문에

크기가 정해져있는 데이터의 그룹핑을 하고 싶다면 배열이 더 효율적인 선택이 되겠다.

 

결국, 내가 오늘 푼 문제에서 다르게 쓰였던 이유는 바로 이 때문이었다.

 

문제에서 n번이라는 횟수(크기)가 정해졌을 때는 배열을 쓰고,

아무런 횟수(크기)가 주어지지 않았을 땐 ArrayList를 썼었던 것!

 

유레카!

 

아 그리고, 배열의 크기는 length를 쓰고

리스트의 크기는 size를 써야한다는 차이도 있음!

 

 

 

자 그럼 여기서 자바에서 나오는

ArrayList는 그래서 뭐일까...?!

 

배열일까, 리스트일까?!

 

정답은 둘 다~!?

 

자바의 List 종류에는 ArrayListLinkedList가 있는데

그 중 하나인 ArrayList Array(배열)와 List(리스트)의 장점을 합친 것이다.

 

배열의 특성인 index로 식별자를 쓰는 것이 가능하고,

리스트 특성그대로 크기를 동적으로 사용할 수 있다!

 

나머지 차이는 배열의 차이와 그대로 동일하다!

 

그냥 자바에서 인덱스를 쓸 수 있는 리스트라고 생각하면 좋을듯하다!

 

 

p.s

<오늘의문제였음>

반응형