Array(배열)와 List(리스트)는 자료구조의 개념으로서 데이터의 관리 또는 적재(추가 또는 수정)에 있어 서로 차이가 있다.
배열
- 배열은 인덱스를 이용해 원하는 요소을 찾는 특징이 있다. 때문에 인덱스는 고정값이어야 한다.
- 배열은 정적으로 선언되어 사용된다.
- 배열 초기화시 메모리에 할당되어 속도가 빠르다.
리스트
- 리스트는 동적인 관리가 가능하다.
- 요소를 추가 또는 수정할 때마다 메모리 재할당이 일어나기 때문에 속도가 느린 단점이 있다.
아래 그림에서 인덱스 0과 1 사이에 'B'라는 요소를 추가하려고 한다.
데이터를 알파벳 순서에 따라 A, B, C, D로 추가하려는 의도이다.
리스트를 이용하면 매우 쉽게 요소를 추가할 수 있다.
간단한 예제 코드를 하나 만들어 보았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class ListTest{ public static void main(String args[]) { System.out.println("LIST START !"); List list = new ArrayList(); list.add("A"); list.add("C"); list.add("D"); for(int i=0; i<list.size(); i++){ System.out.println("index : " + i + " > " + list.get(i)); } System.out.println("LIST ADD B"); list.add(1,"B"); for(int i=0; i<list.size(); i++){ System.out.println("index : " + i + " > " + list.get(i)); } } } | cs |
리스트 인터페이스 중 하나인 ArrayList 클래스를 인스턴스화 하여 list를 만들었다.
add() 메소드는 ArrayList에 원하는 인덱스에 지정값을 저장해준다.
인덱스를 설정하지 않을 경우에는 순서대로 입력된다. ☞ list.add("A");
12번 라인까지 결과를 봤을 때 리스트에는 A, C, D가 저장되어 있다.
이제 15번 라인에서 1번 인덱스에 B를 저장해보았다. ☞ list.add(1,"B");
그 결과, 리스트에는 A, B, C, D가 저장되었다.
이것이 리스트 방식이다. 기존의 인덱스가 증가하면서 각 요소들은 뒤로 한칸씩 밀려 자동으로 할당되었다.
배열의 경우를 알아보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class ListTest{ public static void main(String args[]) { System.out.println("ARRAY START !"); String[] arr = new String[3]; arr[0] = "A"; arr[1] = "C"; arr[2] = "D"; for(int i=0; i<arr.length; i++){ System.out.println("index : " + i + " > " + arr[i]); } System.out.println("ARRAY ADD B"); arr[1] = "B"; for(int i=0; i<arr.length; i++){ System.out.println("index : " + i + " > " + arr[i]); } } } | cs
|
String 배열을 생성하여 A, C, D 요소를 추가했다.
12번 라인까지 결과를 봤을 때 리스트와 결과가 동일하다.
이제 15번 라인에서 1번 인덱스에 B를 추가했다. ☞ arr[1] = "B";
결과는 아래 그림과 같이 기존의 1번 인덱스에 B가 저장되었다.
배열은 크기가 고정적이기 때문에 새 요소를 추가하기 위해서는 배열의 크기를 증가시켜주거나 동적 배열(Dynamic Array)를 사용해야 한다.
+ 피드백은 언제나 환영입니다 :)