LJ

자바 Array list 본문

IT/자바

자바 Array list

짱준재 2022. 9. 26. 16:52

배열과의 차이점

 

배열과의 차이점은 배열이 크기가 고정인 반면 ArrayList는 크기가 가변적으로 변합니다.

내부적으로 저장이 가능한 메모리 용량이 있으며 현재 사용 중인 공간의 크기가 있습니다.

만약 현재 가용량이상을 저장하려고 할 때 더 큰 공간의 메모리를 새롭게 할당합니다.

 

 

ArrayList란?

ArrayList란 Collection 프레임워크의 일부이며 java.util 패키지에 소속되어 있습니다

 

 

표준 배열보다는 느리지만 배열에서 많은 조작이 필요한 경우 유용하게 사용할 수 있습니다

List 인터페이스에서 상속받아 사용이 됩니다

ArrayList는 객체가 추가되어 용량을 초과하면 자동으로 부족한 크기만큼 용량이 늘어납니다

 

 

 

 

 

 

1. ArrayList 생성

자바에서 ArrayList를 사용하려면 아래 구문을 먼저 추가해야 합니다.

import java.util.ArrayList;

ArrayList의 생성은 다음과 같은 구문들로 가능합니다.

ArrayList<Integer> integers1 = new ArrayList<Integer>(); // 타입 지정
ArrayList<Integer> integers2 = new ArrayList<>(); // 타입 생략 가능
ArrayList<Integer> integers3 = new ArrayList<>(10); // 초기 용량(Capacity) 설정
ArrayList<Integer> integers4 = new ArrayList<>(integers1); // 다른 Collection값으로 초기화
ArrayList<Integer> integers5 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); // Arrays.asList()

보통 생성할 때는 new ArrayList<>()와 같이 타입을 생략해서 작성합니다.

ArrayList를 생성할 때 Set이나 다른 ArrayList를 전달하면 해당 Collections의 값들로 초기화됩니다.

마지막으로 가변 인자를 전달받는 Arrays.asList()를 사용하면 기본 값들로 생성 가능합니다.

 

2. ArrayList 엘레멘트 추가/변경

ArrayList를 생성한 후 add() 메소드로 엘레멘트를 추가할 수 있습니다.

또한 set() 메소드로 기존에 추가된 값을 변경하는 것도 가능합니다.

add()의 사용법에는 두 가지가 있습니다

add(Object) : ArrayList의 마지막에 데이터를 추가합니다

add(int index, Object) : ArrayList의 index에 데이터를 추가합니다

 

import java.util.ArrayList;

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList<String> colors = new ArrayList<>();
        // add() method
        colors.add("Black");
        colors.add("White");
        colors.add(0, "Green");
        colors.add("Red");

        // set() method
        colors.set(0, "Blue");

        System.out.println(colors);
    }
}

add()는 기본적으로 리스트의 가장 끝에 값을 추가합니다.

별도로 인덱스를 지정하면 해당 인덱스에 값이 추가되고 그 인덱스부터의 값들이 1 칸씩 밀립니다.

결과는 아래와 같이 출력됩니다.

결과

Black과 White는 순서대로 추가가 되며 Green이 첫 번째에 추가되면서 Black과 White는 각각 한 칸씩 밀리게 됩니다.

그리고 Red가 맨 끝에 다시 추가되는 것을 확인할 수 있습니다.

마지막으로 set() 메소드를 통해 가장 앞(Index: 0)의 Green이 Blue로 변경됩니다.

 

3. ArrayList 엘레멘트 삭제

추가했던 값을 삭제할 때는 remove() 메소드를 호출합니다.

import java.util.ArrayList;
import java.util.Arrays;

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList<String> colors = new ArrayList<>(Arrays.asList("Black", "White", "Green", "Red"));
        String removedColor = colors.remove(0);
        System.out.println("Removed color is " + removedColor);

        colors.remove("White");
        System.out.println(colors);

        colors.clear();
        System.out.println(colors);
    }
}

삭제할 때는 엘레멘트의 인덱스를 입력하거나 엘레멘트를 직접 입력할 수 있습니다.

인덱스를 통해 삭제할 경우 삭제되는 엘레멘트를 리턴받을 수 있습니다.

값을 지움과 동시에 해당 값으로 별도의 작업이 필요한 경우 리턴을 받아서 사용하면 됩니다.

ArrayList 안의 내용을 전체 삭제할 때는 clear()를 호출하면 됩니다.

 

4. ArrayList 전체 값 확인

ArrayList의 모든 값들을 순회해서 출력하고 싶은 경우 다양한 방법을 사용할 수 있습니다.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.ListIterator;

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList<String> colors = new ArrayList<>(Arrays.asList("Black", "White", "Green", "Red"));
        // for-each loop
        for (String color : colors) {
            System.out.print(color + "  ");
        }
        System.out.println();

        // for loop
        for (int i = 0; i < colors.size(); ++i) {
            System.out.print(colors.get(i) + "  ");
        }
        System.out.println();

        // using iterator
        Iterator<String> iterator = colors.iterator();
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + "  ");
        }
        System.out.println();

        // using listIterator
        ListIterator<String> listIterator = colors.listIterator(colors.size());
        while (listIterator.hasPrevious()) {
            System.out.print(listIterator.previous() + "  ");
        }
        System.out.println();
    }
}

for-each 반복문으로 각각의 값을 순회해서 출력하는 것이 가능합니다.

또한 get() 메소드로 각 인덱스의 값을 순차적으로 탐색하는 방법도 가능합니다.

그리고 iterator나 listIterator를 통해 값들을 순회하는 것도 가능합니다.

listIterator의 경우 생성 시 ArrayList의 크기를 입력해주고 역방향으로 출력할 수 있습니다.

출력 결과

마지막의 경우 역순서로 출력이 되는 것을 확인할 수 있습니다.

 

5. 값 존재 유무 확인

ArrayList의 안에 값이 존재하는지 존재한다면 어느 위치에 존재하는지 알고 싶은 경우가 있습니다.

먼저 값이 존재하는지만 알고 싶은 경우 contains()를 사용합니다.

값이 존재할 때 어느 위치에 존재하는지 알고 싶은 경우 indexOf()를 사용할 수 있습니다.

import java.util.ArrayList;
import java.util.Arrays;

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList<String> colors = new ArrayList<>(Arrays.asList("Black", "White", "Green", "Red"));
        boolean contains = colors.contains("Black");
        System.out.println(contains);

        int index = colors.indexOf("Blue");
        System.out.println(index);

        index = colors.indexOf("Red");
        System.out.println(index);
    }
}

contains()는 값이 있는 경우 true를, 값이 없는 경우 false를 리턴합니다.

indexOf()는 값이 존재하는 경우 해당 엘레멘트의 인덱스를 리턴합니다.

값이 존재하지 않을 경우 -1을 리턴하기 때문에 별도로 처리가 가능합니다.

'IT > 자바' 카테고리의 다른 글

자바 객체 선언과 생성  (0) 2022.09.27
자바 업 캐스팅 다운 캐스팅  (0) 2022.09.26
자바 is-a has-a  (0) 2022.09.26
자바 향상된 for 문  (0) 2022.09.26
자바 static  (0) 2022.09.26
Comments