요즘 코딩테스를 공부중인데 문법을 따로 공부하는 것보다
오히려 문제를 풀면서 문법과 자료구조에 대해 더 잘 알게되는 것 같다!
오늘 코테 풀이에서는 어떨 때는 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 종류에는 ArrayList와 LinkedList가 있는데
그 중 하나인 ArrayList는 Array(배열)와 List(리스트)의 장점을 합친 것이다.
배열의 특성인 index로 식별자를 쓰는 것이 가능하고,
리스트 특성그대로 크기를 동적으로 사용할 수 있다!
나머지 차이는 배열의 차이와 그대로 동일하다!
그냥 자바에서 인덱스를 쓸 수 있는 리스트라고 생각하면 좋을듯하다!
p.s
<오늘의문제였음>
'JAVA' 카테고리의 다른 글
[javadoc] Java 주석처리 하는 법(+javodoc 사용법, 양식 총 정리) (1) | 2021.10.25 |
---|---|
[자바 템플릿엔진] jsp는 이제 안녕? thymeleaf란? (0) | 2021.10.22 |
[JAVA] 정규표현식에 대해서 알아보자!(+자주쓰는 regex 이메일,주민번호 등) (0) | 2021.10.07 |
[JAVA] 비전공자가 알려주는 객체지향이란?(+클래스,추상화,객체 개념정리) (0) | 2021.09.17 |
[JAVA] 자바 public static void main (String args) 뜻은? (0) | 2021.09.09 |