CS/OOP

Java Array와 List 차이 알아보기

쪼멘탈 2022. 9. 16. 16:19
반응형

Array와 List

 

 

Array란?

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열이라고 한다. 

 

베열의 선언 

타입[] 변수이름; int[] score;
타입 변수이름;   int score[];

배열은 선언한 다음에 배열을 생성해야한다. 배열을 선언만 하는것은 단지 생성된 배열을 다루기 위한 참조변수 공간을 만들 뿐이고, 배열을 생성해야지만 비로소 값을 저장할 수 있는 공간이 만들어진다.

타입[] 변수이름 = new 타입[길이]
int[] score = new int[5]; // 배열을 생성하면서 배열의 길이를 적어 줘야한다.
int score[] = new int[5];

배열의 길이를 적워줘야 배열의 요소의 개수, 즉 값을 저장할 수 있는 공간의 개수가 할당되며, 배열에서는 인덱스를 사용하는데 인덱스는 배열을 접근하기 위헤서 사용된다. 인덱스의 범위는 0 ~ 배열의 길이 - 1 까지이다.

 

배열 사용시 주의점

배열은 한번 생성하면 길이를 변경할 수 없기 때문에, 이미 생성된 배열의 길이는 변하지 않는다. 배열의 크기 이상의 값을 할당하면 ArrayIndexOutOfBoundsException이라는 예외가 발생하여 비정상적으로 종료된다.

 

만약 배열의 길이를 정말 바꾸고 싶다면 더 큰 배열을 새로 생성하고 기존 배열의 내용을 새로운 배열에 복사하는 방법이 있지만 별로 효율적인 방법은 아니다. 이런 작업은 비용이 많이 들기 때문에 처음부터 배열의 길이를 넉넉하게 잡아줘서 새로 배열을 생성하는 상황을 적게 만드는 것이 더 좋다.

 

배열의 복사 방법

배열을 복사하는 가장 쉬운 방법은 for문을 사용하여 하나씩 접근해 값을 복사하는 방법이다. 가장 기본적으로 생각할 수 있는 방법이기도 하지만 for문 대신 System.arraycopy()를 이용하는 것이 더 효율이 좋다. arraycopy()는 지정된 범위의 값들을 한 번에 통째로 복사하여 연속적으로 저장되어 있는 배열의 특성을 이용한다.

 

List란?

Java List에는 여러 종류가 있다.(ArrayList, Vector, LinkedList 등의 List 인터페이스를 구현한 자료형) 

List는 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현한다. List의 기본 크기는 10으로 생성되지만 생성할 때 변경이 가능하고 List의 크기에 넘어간다면 자동으로 크기를 키워준다.

 

ArrayList란?

ArrayList는 List인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용하며 기존의 Vector를 개선한 것으로 Vector와 구현원리와 기능적인 측면에서는 동일하다고 할 수 있다. (Vector보단 ArrayList를 사용하자)

public class ListTest {

    public static void main(String[] args) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);

        System.out.println(arrayList); // [1, 2, 3]

    }

}

 

참고

https://wikidocs.net/207

 

03-07 리스트 (List)

[TOC] 리스트는 배열과 비슷한 자바의 자료형으로 배열보다 편리한 기능을 많이 가지고 있다. 리스트와 배열의 가장 큰 차이는 크기가 정해져 있지 않고 동적으로 변한다 ...

wikidocs.net

 

반응형