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

     

    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();
        }
    }

    댓글