잡아야 할 중요한 키워드
#순서
#중복허용
Array와List
둘 다 순서대로, 중복해서 데이터를 저장할 수 있다.
array기능보다 list의 기능이 더 많다.
일반적인 사용방법을 비교해보자면..
array는 인덱스가 중요하다. 인덱스로 바로 찾아갈 수도 있고.
list도 내부적으로는 인덱스를 가지고 있겠지만, list는!
쟤의 다음 데이터는 이거고, 이거의 다음 데이터는 저거고,, 이렇게 순서가 중요하게 여겨진다.
값의 추가
a라는 배열의 a[3]값은 지금 40인데, 내가 50을 넣는다고 하자
배열에서는 값이 덮어쓰기가 된다.
그러나 리스트 a라면, 3번 인덱스 자리에 50이 넣어지고, 기존의 a[3]은 a[4]로 인덱스 넘버가 밀린다.
값의 삭제
배열은 그 인덱스 자리가 빈자리가 되지만,
리스트는 다음 자리에 있던 값이 그 인덱스 번호를 채운다. 인덱스 번호가 재조정됨.
리스트는 이렇게 데이터가 연속, 데이터가 있는지 없는지 체크할 필요가 없음.
이렇게 배열은 인덱스가 데이터를 식별하는 식별자로써 아주 의미가 있음.
자료구조에서 중요한 것은, 그 자료구조가 어떤 '기능', '동작 방법', 'Operation' 을 가지고 있느냐다.
따라서 지금부터 리스트의 기능을 공부하자 (한 기능은 그 자료구조에 유일하지 않을 수 있다.)
'처음, 끝, 중간에 엘리먼트를 추가/삭제하는 기능'
'어떠한 데이터가 있는지 없는지 체크하는 기능'
'리스트의 모든 데이터에 접근할 수 있는 기능'
최근의 언어는 리스트를 기본적으로 지원한다.
(or리스트처럼 배열을 이용할 수 있다.)
뭐 c같은 경우는 리스트 기능이 없어서,
내가 직접 자료구조를 만들거나, 남이 만들어놓은 라이브러리를 사용해야 한다. 그렇기 때문에 리스트에 대한 안목이 필요해서, 관련 지식이 더 중요하다고 한다.
배열
int[] numbers = {10, 20, 30, 40, 50}
리스트
ArrayList numbers = new ArrayList();
numbers.add(10);
numbers.add(20);
.
.
자바는 리스트를 두 개 지원한다! LinkedList, ArrayList.
arraylist는 추가/삭제는 느린데, 인덱스 알고있다면 값 조회가 빠르다.
linkedlist는 반대다. 추가 삭제가 빠르다.
(자바가 이렇게 세분화되어서 알아야 할 것이 많지만, 개발자의 자유도가 높다)
데이터 스트럭쳐는 언어마다 다르다.
그래서 데이터 스트럭쳐의 중심되는 컨셉이 뭔지 파악하는 것이 중요하다.
따라서 이 수업이 중요한 것이다.
다음 시간에서는 LinkedList와 ArrayList가 어떻게 작동하고 구현되는지 공부해보자.
(발전소 종류가 여러가지인 것처럼 각 작동방식이 다르다)
'자료구조 + 알고리즘' 카테고리의 다른 글
[자료구조] ArrayList 구현 - addLast, 데이터를 끝에 추가 [Java] (0) | 2020.03.11 |
---|---|
[자료구조] ArrayList 구현 - 객체생성 [Java] (0) | 2020.03.10 |
[자료구조] Array List [JAVA] (0) | 2020.03.09 |
[자료구조] Array 배열 [JAVA] (0) | 2020.03.08 |
자료구조 공부 시작 (0) | 2020.03.08 |