코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java ArrayList

자바 ArrayList: 개념 및 사용법

  • *ArrayList*는 자바에서 가장 많이 사용되는 리스트 데이터 구조 중 하나로, 크기가 가변적인 배열입니다. 기본적인 배열은 크기가 고정되어 있지만, **ArrayList*는 필요에 따라 자동으로 크기를 조정할 수 있습니다. 이로 인해 데이터의 추가 및 삭제가 더 유연하게 이루어집니다.

자바의 ArrayList.util 패키지에 포함된 클래스이며, 여러 유용한 메서드를 통해 데이터를 다루는 기능을 제공합니다.

1. ArrayList의 특징

  1. 가변 크기 배열: 배열과 달리 ArrayList는 크기를 미리 지정하지 않고 동적으로 크기가 증가하거나 감소합니다.
  2. 중복 허용: 동일한 요소를 여러 번 추가할 수 있습니다.
  3. 순서 유지: 요소들은 추가된 순서를 유지합니다.
  4. 객체만 저장 가능: ArrayList는 객체만 저장할 수 있으며, 기본 자료형(예: int, char)은 래퍼 클래스(예: Integer, Character)로 자동 변환됩니다.
  5. 비동기적: ArrayList는 동기화되지 않으며, 멀티스레드 환경에서 사용할 때는 별도의 동기화가 필요합니다.

2. ArrayList 선언 및 생성

ArrayList를 사용하려면 먼저 .util.ArrayList를 임포트해야 합니다. 다음은 기본적인 ArrayList의 선언 및 생성 방법입니다.

선언 및 생성 예제

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // String 타입의 ArrayList 생성
        ArrayList<String> fruits = new ArrayList<>();

        // Integer 타입의 ArrayList 생성
        ArrayList<Integer> numbers = new ArrayList<>();
    }
}

위 예제에서는 String 타입과 Integer 타입을 저장할 수 있는 ArrayList를 생성했습니다. 제네릭을 사용하여 저장할 데이터 타입을 지정할 수 있으며, 지정된 타입 외의 데이터는 저장할 수 없습니다.

3. ArrayList 메서드

ArrayList는 데이터를 추가, 수정, 삭제, 검색하는 다양한 메서드를 제공합니다. 주요 메서드는 다음과 같습니다.

3.1 add() - 요소 추가

add() 메서드는 ArrayList에 요소를 추가하는 데 사용됩니다.

import java.util.ArrayList;

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

        // 요소 추가
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // 출력
        System.out.println(fruits);  // 출력: [Apple, Banana, Orange]
    }
}

3.2 get() - 요소 가져오기

get() 메서드는 ArrayList에서 특정 인덱스에 있는 요소를 반환합니다.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // 인덱스 1에 있는 요소 가져오기
        String fruit = fruits.get(1);
        System.out.println(fruit);  // 출력: Banana
    }
}

3.3 size() - 리스트 크기 확인

size() 메서드는 ArrayList에 저장된 요소의 개수를 반환합니다.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");

        // 리스트 크기 확인
        System.out.println(fruits.size());  // 출력: 2
    }
}

3.4 set() - 요소 수정

set() 메서드는 특정 인덱스의 요소를 새로운 값으로 수정합니다.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");

        // 인덱스 1의 값을 수정
        fruits.set(1, "Mango");

        System.out.println(fruits);  // 출력: [Apple, Mango]
    }
}

3.5 remove() - 요소 삭제

remove() 메서드는 인덱스를 사용하거나 특정 요소를 지정하여 ArrayList에서 요소를 삭제합니다.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // 인덱스 1의 요소 삭제
        fruits.remove(1);
        System.out.println(fruits);  // 출력: [Apple, Orange]

        // 특정 요소를 삭제
        fruits.remove("Apple");
        System.out.println(fruits);  // 출력: [Orange]
    }
}

3.6 contains() - 요소 포함 여부 확인

contains() 메서드는 특정 요소가 ArrayList에 포함되어 있는지 여부를 반환합니다.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");

        // 특정 요소 포함 여부 확인
        System.out.println(fruits.contains("Apple"));  // 출력: true
        System.out.println(fruits.contains("Mango"));  // 출력: false
    }
}

3.7 isEmpty() - 리스트가 비어 있는지 확인

isEmpty() 메서드는 ArrayList가 비어 있는지 확인하는 데 사용됩니다.

import java.util.ArrayList;

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

        // 리스트가 비어 있는지 확인
        System.out.println(fruits.isEmpty());  // 출력: true

        fruits.add("Apple");

        System.out.println(fruits.isEmpty());  // 출력: false
    }
}

3.8 clear() - 모든 요소 삭제

clear() 메서드는 ArrayList에 저장된 모든 요소를 제거합니다.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");

        // 모든 요소 삭제
        fruits.clear();

        System.out.println(fruits);  // 출력: []
    }
}

4. ArrayList와 반복문

ArrayList는 반복문을 사용하여 요소에 접근하거나 처리할 수 있습니다. 대표적으로 for, 향상된 for, **Iterator**를 사용할 수 있습니다.

4.1 for문을 사용한 반복

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // for문을 사용하여 요소 출력
        for (int i = 0; i < fruits.size(); i++) {
            System.out.println(fruits.get(i));
        }
    }
}

4.2 향상된 for문을 사용한 반복

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // 향상된 for문을 사용하여 요소 출력
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

4.3 Iterator를 사용한 반복

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

public class Main {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // Iterator를 사용하여 요소 반복
        Iterator<String> iterator = fruits.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

5. 제네릭과 ArrayList

ArrayList제네릭을 사용하여 저장할 데이터 타입을 지정할 수 있습니다. 제네릭을 사용하면 타입 안전성을 보장하며, 컴파일 시점에서 타입 오류를 방지할 수 있습니다.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // 정수 타입의 ArrayList 생성
        ArrayList<Integer> numbers = new ArrayList<>();

        numbers.add(10);
        numbers.add(20);

        // numbers.add("String");  // 컴파일 오류 (잘못된 데이터 타입 추가

 시)

        System.out.println(numbers);
    }
}

6. ArrayList와 배열의 차이점

특징 배열 (Array) ArrayList
크기 고정된 크기, 생성 시 크기 지정 동적 크기, 요소 추가 시 자동으로 크기 증가
데이터 타입 기본형 데이터 타입 저장 가능 객체만 저장 가능 (래퍼 클래스를 통해 기본형 저장)
성능 고정 크기라 더 빠름 크기 조정 시 성능 저하 가능
사용 방법 배열 연산이 직관적이고 빠름 다양한 메서드를 제공하여 데이터 관리가 편리

요약

  • *ArrayList*는 크기가 가변적인 배열로, 동적으로 크기를 조정할 수 있는 유연한 데이터 구조입니다.
  • 요소 추가, 삭제, 수정, 조회를 위한 다양한 메서드를 제공합니다.
  • 제네릭을 사용하여 타입 안전성을 보장할 수 있습니다.
  • 반복문과 Iterator를 사용해 ArrayList 요소를 반복할 수 있습니다.
  • 기본 배열에 비해 더 유연하지만, 성능이 중요한 경우 기본 배열을 사용할 수 있습니다.

ArrayList는 자바에서 가장 많이 사용되는 컬렉션 중 하나로, 다양한 상황에서 데이터를 관리하는 데 유용합니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com