Java

[Java] ArrayList

lala9663 2022. 11. 23. 15:20

ArrayList는 배열에서 좀 더 발전된 형태이다. 공부하면서 array만 썼는데 ArrayList를 알고 나서 매우 편하다는 걸 알게 되었다.

ArrayList에 대해 알아보자.

ArrayList란?

Collection 프레임워크의 일부이며 java.util 패키지에 소속되어 있다.
표준 배열보다는 느리지만 배열에서 많은 조작이 필요한 경우 유용하게 사용할 수 있다.
ArrayList는 자바의 List 인터페이스를 상속받는 여러 클래스 중 하나이다.
일반 배열과 동일하게 연속된 메모리 공간을 사용하며 인덱스는 0부터 시작한다.

 

 

 

배열과의 차이점은 배열의 크기가 고정인 반면 ArrayList는 크기가 가변적으로 변한다.
내부적으로 저장이 가능한 메모리 용량이 있으며 현재 사용 중인 공간의 크기가 있다.
만약 현재 가용량 이상을 저장하려고 할 때 더 큰 공간의 메모리를 새롭게 할당한다.


ArrayList 선언과 생성

선언

import java.util.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()

주로 타입으로 선언을 많이하고, 추가로 다른 타입(String, Character) 등의 타입으로 선언이 가능하다.
타입을 선언하면 해당 타입의 데이터만 추가가 가능하다.


ArrayList 값 추가와 변경

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칸씩 밀린다.

결과값: [Bluse, Black, White, Red]

다른 예시를 보자

import java.util.ArrayList;

public class ArrayListDemo {
    public static void main(String[] args)  {
        ArrayList<String> al = new ArrayList<>();

        al.add("Hello");
        al.add("Hello");
        al.add(1, "World");

        System.out.print(al);
    }
}

결과

[Hello, World, Hello]

ArrayList 값 삭제

ArrayList 값을 삭제하는 방법에는 두 가지가 있다.
remove()와 clear()이다.

clear()는 ArrayList의 모든 값을 삭제할 때 사용된다.
remove()는 값을 하나씩 제거할 때 사용된다.

remove()에서도 두 개의 사용법이 있다.
remove(Object): Object를 파라미터로 넘기는 경우 해당 ArrayList의 Object와 같은 값을 삭제한다. 만약 같은 값이 두 개 이상인 경우 첫 번째 같은 값을 제거한다
remove(int index): ArrayList의 index에 해당하는 값을 삭제한다.

import java.util.ArrayList;

public class ArrayListDemo {
    public static void main(String[] args)  {
        ArrayList<String> al = new ArrayList<>();

        al.add("Hello");
        al.add("World");
        al.add("Hello");
        al.add("World");

        System.out.println("초기값 : " + al);

        al.remove("Hello");

        System.out.println("1번 삭제 : " + al);

        al.remove(1);

        System.out.println("2번 삭제 : " + al);

        al.clear();

        System.out.println("3번 삭제 : " + al);
    }
}

결과

초기 값: [Hello, World, Hello, World]
1번 삭제: [World, Hello, World]
2번 삭제: [World, World]
3번 삭제: []

AttayList 값 출력

ArrayList의 결과를 출력하는 방법에는 get(int index) 메서드가 있다.
index를 입력하면 해당 Index의 데이터가 출력된다.
전부 출력하고 싶다면 for문과 향상된 for문을 사용하여 출력할 수 있다.

추가로 Iterator를 사용하여 출력할 수도 있다.

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListDemo {
    public static void main(String[] args)  {
        ArrayList<String> al = new ArrayList<>();

        al.add("Hello");
        al.add("World");
        al.add("Hello");
        al.add("World");

        for (int i = 0; i < al.size(); i++) {              
            System.out.print(al.get(i) + " ");
        }

        System.out.println();

        for (String str : al)
            System.out.print(str + " ");

        System.out.println();

        Iterator iter = al.iterator();
        while(iter.hasNext()){
            System.out.print(iter.next() + " ");
        }
    }
}

결과

Hello World Hello Wrold
Hello World Hello Wrold
Hello World Hello Wrold

ArrayList 값 검색

값을 검색하는 방법에는 contains와 indexOf()가 있다.
contains는 값이 있는 경우 true를, 값이 없는 경우 false를 리턴한다.
indexOf()를 사용하면 값의 위치 Index를 찾아주고 값이 없다면 -1을 리턴하기 때문에 별도로 처리가 가능하다.

import java.util.ArrayList;

public class ArrayListDemo {
    public static void main(String[] args)  {
        ArrayList<String> al = new ArrayList<>();

        al.add("Hello");
        al.add("World");
        al.add("Hello");
        al.add("World");

        System.out.println("값 검색(contains) : " + al.contains("Hello"));
        System.out.println("값 검색(indexOf) : " + al.indexOf("World"));
    }
}

결과

값 검색(contains) : true
값 검색(indexOf) : 1

 

 

 

 

참고: https://crazykim2.tistory.com/558