영벨롭 개발 일지

[Java] 자바 ArrayList 정리 본문

Programming Language/Java

[Java] 자바 ArrayList 정리

영벨롭 2023. 7. 21. 16:53

★ ArrayList

 ArrayList 는 List 인터페이스를 상속받은 클래스로 순서가 있는 데이터들의 집합입니다. 

 Array 는 컴파일 전에 반드시 배열의 크기를 지정해야 하며 그 크기가 고정되어 있어 늘리거나 줄일 수 없습니다. 

 ArrayListArray 와 마찬가지로 인덱스로 내부 객체를 관리한다는 점에서 동일하지만, Array 와 달리 그 크기를 동적으로 늘릴 수 있으며 더 다양한 메소드를 제공합니다. 

 ArrayList 는 초기 용량을 10으로 지정하고, 초기에 지정한 용량을 넘어설 경우 그 크기의 1.5 배로 증가시킵니다. 

 

 

★ ArrayList 선언

 ArrayList 를 선언하는 방법은 다음과 같습니다. 

 타입을 지정하지 않고 선언할 경우에는 객체 내부에 데이터를 삽입할 때 임의의 자료형을 가진 데이터를 삽입하는 것이 가능하지만, 값을 뽑아내어 사용할 때는 캐스팅(Casting) 연산이 필요하기 때문에 권장하는 방식은 아닙니다. 

 ArrayList 는 저장 데이터 타입으로 object 만 허용하므로, 타입을 지정할 때는 기본형으로 지정할 수 없습니다. 

 예를 들어 기본형인 int 형으로 타입을 지정하고 싶다면 int 를 객체화 시킨 wrapper 클래스인 Integer 클래스를 사용하여 타입을 지정해야 합니다. 

// 타입 지정 X
ArrayList list = new ArrayList();

// Integer 타입으로 지정
ArrayList<Integer> num1 = new ArrayList<>();
ArrayList<Integer> num2 = new ArrayList<Integer>();

// 초기 용량 intialCapacity 10으로 지정
ArrayList<Integer> num3 = new ArrayList<>(10);

// Integer 타입으로 지정 및 초기화
ArrayList<Integer> num4 = new ArrayList<Integer>(Arrays.asList(1, 2, 3));

 

★ ArrayList 데이터 삽입

 ArrayList 에 데이터를 삽입하는 방법은 다음과 같습니다. 

 데이터를 추가할 위치인 인덱스를 생략하면 데이터는 ArrayList 의 맨 뒤에 삽입됩니다. 

 인덱스를 지정하여 삽입하게 되면 해당 인덱스부터 마지막 인덱스까지 모두 뒤로 1칸씩 밀려나게 됩니다. 

 때문에 리스트 중간에 삽입과 삭제가 빈번히 일어나는 프로그램을 작성할 때에는 ArrayList 대신 LinkedList 를 사용하는 것이 효율적입니다. 

ArrayList<Integer> list = new ArrayList<>();

list.add(데이터);
list.add(인덱스, 데이터); // 인덱스 위치에 데이터 삽입

 

★ ArrayList 데이터 삭제

 마찬가지로 remove 를 사용하여 중간의 데이터를 삭제하면 해당 인덱스부터 마지막 인덱스까지 1칸씩 앞으로 당겨집니다. 

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));

list.remove(인덱스); // 인덱스 위치 데이터 삭제
list.clear(); // 모든 데이터 삭제

 

 

★ ArrayList  크기

 ArrayList 의 크기는 size() 메소드를 통해 구할 수 있습니다. 

ArrayList list = new ArrayList(Arrays.asList(1, 2, 3));
System.out.println(list.size()); // 3

 

★ ArrayList  검색

 ArrayList 내의 데이터를 검색할 때에는 contains() 메소드와 indexOf() 메소드를 사용할 수 있습니다. 

 

 contains() 메소드는 해당 데이터가 ArrayList 에 존재하는지 여부를 boolean 형으로 반환하며,

 indexOf() 메소드는 해당 데이터의 index 를 반환합니다. 이때 데이터가 존재하지 않으면 -1을 반환합니다. 

ArrayList list = new ArrayList(Arrays.asList(1, 2, 3));

boolean isContains = list.contains(1); // true, 1 이 있는지 검사
int findIndex = list.indexOf(1); // 0, 1의 위치 index 를 반환

 

★ ArrayList  데이터 접근

 Array 에서 배열[인덱스] 와 같이 요소를 접근하는 것과 달리, ArrayList 는 get() 메소드를 이용하여 객체 내부의 데이터를 접근합니다. 

 접근하고자 하는 인덱스를 get() 메소드의 매개변수로 넘겨줍니다. 

ArrayList list = new ArrayList(Arrays.asList(1, 2, 3));
// list.get(인덱스)
System.out.println(list.get(0)); // 1

 

★ ArrayList  출력

 ArrayList 를 출력하는 방법은 다음과 같습니다. 

        ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));

		// 객체명으로 출력
        System.out.println(list); // [1, 2, 3]
        System.out.println(list.toString()); // [1, 2, 3]

		// for 문 + get() 메소드로 출력
        for(int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
        System.out.println();
        // 1 2 3

		// 향상된 for 문
        for(Integer el : list) {
            System.out.print(el + " ");
        }
        System.out.println();
        // 1 2 3

		// Iterator 인터페이스 사용
        Iterator iter = list.iterator();
        while(iter.hasNext()) {
            System.out.print(iter.next() + " ");
        }
        System.out.println();
        // 1 2 3
반응형