Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

SSinsa

1. 배열과 리스트의 관계 본문

Java/Java Programming

1. 배열과 리스트의 관계

SSinsa 2020. 1. 15. 01:27

배열과 리스트는 비슷하면서도 다르다.

따라서, 습관적인 사용을 하거나, 때로는 둘의 차이를 놓쳐 작은 실수에서 오랜 시간을 빼앗기기도 해왔다.

 

1) 배열

 

먼저, 배열은 대괄호를 사용한다.

ex) final String[] strings = new String[] {"one", "two"};

 

이때, 자료형에 따라 선언 방식이 차이가 있는데,

int 배열은 명시적으로 크기를 지정,  boolean 배열은 암시적으로 크기를 지정

이렇게 다르게 지정해도 컴파일러는 자동으로 길이를 계산해준다.

 

- 랜덤접근 : 인덱스 값을 이용해 배열 원소에 직접 접근

 

사용중인 배열에 원소를 추가하려면,

더 큰 배열을 새로 만들어 현재 배열을 담았야한다. 또한, 새 배열에 원본 배열의 주소도 재할당해야한다.

(JVM은 이 역할을 System 클래스 객체에 arrayCopy 사용!)

 ex) System.arraycopy(integers, 0, newIntegersArray, 0, integers.length);

 

 

* 정수 타입 배열에는 final 키워드를 사용할 수 없다.

 

2) 리스트

 

ArrayList

- 리스트의 데이터로 배열을 사용

- List 인터페이스의 구현체 

- 배열이 인터페이스를 뒷받침하는 모습

 

ArrayList 클래스 생성시 초기 배열 크기 지정 (default 10)

원소를 추가할 때면 자동으로 더 큰 배열 재할당 (배열의 성격이 담겨있음) -> 그러나, 시간이 소요, 더 큰 메모리 용량을 소모

따라서, 이것을 사용할 땐 크기를 크게 잡기!

 

또한, 중간에 원소를 추가하려면 그 뒤 모든 원소는 전체 이동...;; 따라서 연산량이 많은 작업이 될 수 있다.

이때 모든 재할당 작업은 단방향!

 

그럼 ArrayList 클래스로 만든 배열을 삭제할땐?

원소를 삭제해도 배열의 크기는 줄지 않는다. 생성시 고정으로 만들었기 때문에.

 

즉, 변경이 많을 때는 비추!

그럼 추천 상품은? 바로, LinkedList 이다.

 

# LinkedList

 

배열을 사용하지 않는다. 대신 리스트 안에서 다음 원소를 가리키는 내부 객체를 이용.

 

public class SimpleLinkedList<E> {

  private static class Element<E> {

    E value;

    Element<E> next;

  

  }

  private Element<E> head;

}

 

즉, LinkedList는 head와 next로 원소를 찾는다.

따라서, 변경이 많은 작업에 사용하면 효율적이다.

 

그러나  ArrayList 클래스는 랜덤접근으로 인덱스를 바로 찾을 수 있다는 장점이 있으며, 리스트 크기가 클 때 추천한다. 

 

또, LinkedList는 원소들이 연결되어있어 역방향으로 검색이 편리해진다.

 

cf. LinkedList는 Queue 인터페이스를 구현할 수 있다.

'Java > Java Programming' 카테고리의 다른 글

9. JUnit으로 테스팅하기  (0) 2020.02.18
5. 어노테이션 이용하기  (0) 2020.02.05
4. 오토박싱과 언박싱 이해하기  (0) 2020.02.05
3. 제네릭 이해하기  (0) 2020.01.15
2. String 이용하기  (0) 2020.01.15