Java

[JAVA] ArrayList와 ArrayList 배열 (비정형 배열)

yebeen 2023. 11. 4. 17:49

 

ArrayList

 

기존의 배열 불편한 점

배열의 크기를 미리 할당하고 해당 크기 안에서만 사용가능

만약 더 많은 데이터를 담거나 데이터를 삭제 시 배열의 크기를 변경시키고 index 변경을 해야한다.

 

배열의 크기를 미리 할당하지 않고 데이터를 자유롭게 추가 및 삭제하고 싶다면

ArrayList를 사용하는 것이 하나의 방법이다.

 

ArrayList는 일반 배열과 동일하게 인덱스 0부터 연속적인 메모리 공간을 사용한다.

내부적으로는 저장이 가능한 메모리 용량(capacity)과 현재 사용 중인 공간의 크기(size)가 존재한다.

 

 

[ 선언법 ]

import java.util.ArrayList;

ArrayList list = new ArrayList(); // 데이터타입 선언을 하지않는 경우 object로 설정
ArrayList <Integer> = new ArrayList<Integer>();

 

 

[ 데이터 추가 ]

list.add(null) // null 삽입 가능
list.add(3) // 데이터 타입에 맞는 데이터 삽입
list.add(5,10) // 5번 인덱스에 10 데이터 삽입

 

 

[ 데이터 삭제 ]

list.remove(index) // 해당 index의 데이터 삭제 - 인덱스로 삭제시 삭제되는 데이터 리턴도 함
list.remvoe("plz remove") // 해당 데이터 삭제
list.clear() // arraylist의 모든 데이터 삭제

 

 

[ 데이터 접근법 ]

list.get(index); // 해당 Index의 데이터 반환

//iterator사용 -> arraylist의 데이터를 where문을 돌면서 순서대로 접근
iterator it = list.iterator;
where(it.hasnext()){
	System.out.println(it+" ");
}

//for each문
for(int i : list){
	System.out.println(i+" ");
}

 

 

[ 데이터 존재여부 확인 ]

list.contains(값); // true, false 반환
list.indexOf(index); //리스트의 앞쪽부터 인자와 동일한 데이터가 있는지 찾으며 
                    //해당 데이터가 없는 경우 -1 출력, 데이터가 있는 경우 index 출력

 

 

[ 데이터 크기 확인 ]

list.size();

 

 


ArrayList 배열

 

알고리즘 문제[백준 - 11724]를 푸는데

비정형 배열을 사용하면 너무 쉽게 데이터를 저장하고 접근할 수 있을 것 같았다.

하지만 문제는 데이터 크기가 정해져 있지 않고 사용자의 입력에 따라 달라진다는 점에서 자바의 비정형 배열을 사용할 수 없었고

그래서 찾다 보니 ArrayList를 배열로도 사용할 수 있다길래 정리해 두기로 했다.

( 자바 공부 안 한 지 어연 2년.. 정말 거의 다 까먹어버렸다. )

 

 

[ 선언법 ]

ArrayList <Integer> [] arr = new ArrayList[size];
for(int i=0;i<size;i++){
	arr[i] = new ArrayList<Integer>();
}

 

 

[ 배열 데이터 추가하고 담긴 데이터 확인해 보기 ]

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // ArrayList 배열크기
        int node = sc.nextInt();
        // 데이터 입력 횟수
        int li = sc.nextInt();
        
        //arraylist 선언 및 초기화
        ArrayList<Integer>[] ll = new ArrayList[node + 1];
        for (int i = 1; i < node + 1; i++) {
            ll[i] = new ArrayList<Integer>();
        }
        
        //데이터 삽입
        for (int i = 1; i < li + 1; i++) {
            int s = sc.nextInt();
            int e = sc.nextInt();
            ll[s].add(e);
            ll[e].add(s);
        }
        //데이터 출력
        System.out.println("-------------------");
        for (int i = 1; i < node + 1; i++) {
            System.out.print("arraylist[" + i + "] : ");
            for (int k : ll[i]) {
                System.out.print(k + " ");
            }
            System.out.println();
        }
        sc.close();
    }
}