본문 바로가기
JAVA

JAVA ArrayList 사용 방법 정리

by 코딩이라구 2022. 12. 8.

ArrayList는 자바(Java)에서 기본적으로 많이 사용하는 클래스입니다. ArrayList는 자바의 List 인터페이스를 상속받은 클래스 중 하나입니다. 일반 배열과 동일하게 연속된 메모리 공간을 사용하며 인덱스는 0부터 시작합니다. 이번에는 자바에서 ArrayList 사용법에 대하여 알아보도록 하겠습니다.


Java ArrayList

 

ArrayList란?

ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형 리스트입니다. 일반적인 배열과 같은 순차 리스트이며 인덱스로 내부의 객체를 관리한다는 점 등이 유사하지만 한번 생성되면 크기가 변하지 않는 배열과는 달리 ArryList는 객체들이 추가되어 저장 용량(capacity)을 초과한다면 자동으로 부족한 크기만큼 저장 용량이 늘어난다는 특징을 가지고 있습니다. 사용되는 인덱스는 0부터 시작합니다.

 

ArrayList 구조
ArrayList 구조


ArrayList 사용 방법

ArrayList 선언

//타입 미설정 Object로 선언된다.
ArrayList list = new ArrayList();

//타입설정 Student객체만 사용가능
ArrayList<Student> members = new ArrayList<Student>();

//타입설정 int타입만 사용가능
ArrayList<Integer> num = new ArrayList<Integer>();

//new에서 타입 파라미터 생략가능
ArrayList<Integer> num2 = new ArrayList<>();

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

//생성시 값추가
ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(1,2,3));

 

ArrayList 선언 시 ArrayList list = new ArrayList()로 선언 후 내부에 임의의 값을 넣고 사용할 수도 있지만 이렇게 사용할 경우 값을 뽑아내기 위해서는 캐스팅(Casting) 연산이 필요하고 잘못된 타입으로 캐스팅을 한 경우에는 에러가 발생하기에 위와 같은 방식은 추천드리지 않습니다. ArryList를 사용할 시에는 ArrayList에 타입을 명시해주는 것이 바람직합니다.

JDK 5.0 이후부터 자료형의 안정성을 위해 제너릭스(Generics)라는 개념이 도입되었습니다. ArrayList<String> list = new ArrayList<String>();이라고 되어있다면 String 객체들만 추가될 수 있고 다른 타입의 객체의 사용이 불가능합니다.

 

※ 제네릭스는 선언할 수 있는 타입이 객체 타입입니다. int는 기본자료형이기 때문에 들어갈 수 없으므로 int를 객체화시킨 wrapper 클래스를 사용해야 합니다.)

 

ArrayList 값 추가

// 값 추가 (null값도 추가 가능)
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(null);
list.add(1, 10);

// 객체 추가
ArrayList<Student> members = new ArrayList<Student>();
Student student = new Student(name, age);
members.add(student);
members.add(new Student("홍길동", 19);

 

ArrayList에 값을 추가하려면 ArrayList의 add(index, value) 메서드를 사용하면 됩니다. 위의 list.add(1, 10)은 인덱스(index)가 1인 위치에 10이라는 값을 추가하는 것입니다. 인덱스를 생략하면 ArrayList 맨 뒤에 데이터가 추가되며 인덱스 중간에 값을 추가하면 해당 인덱스부터 마지막 인덱스까지 모두 1씩 뒤로 밀려납니다.

 

이 경우 데이터가 늘어나면 늘어날수록 성능에 악영향이 미치기에 중간에 데이터를 삽입(insert)을 해야 할 경우가 많다면 ArrayList보다 LinkedList를 활용해보시는 것도 좋은 방법입니다.

ArrayList 중간 위치에 데이터 삽입
ArrayList 중간 위치에 데이터 삽입

 

ArrayList 값 삭제

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
//0번째 index 출력
System.out.println(list.get(0));

//for문을 통한 전체출력
for(Integer i : list) {
    System.out.println(i);
}

//Iterator 선언 
Iterator iter = list.iterator();
//다음값이 있는지 체크
while(iter.hasNext()){
	//값 출력
    System.out.println(iter.next());
}

 

ArrayList의 get(index) 메서드를 사용하면 ArrayList의 원하는 index의 값이 리턴됩니다. 전체 출력은 대부분 for문을 통해서 출력하고 Iterator 클래스를 사용하여 출력할 수도 있습니다.

 

ArrayList 값 검색

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
//list에 1이 있는지 검색 : true
System.out.println(list.contains(1));
//1이 있는 index반환 없으면 -1
System.out.println(list.indexOf(1));

 

ArrayList에서 찾고자 하는 값을 검색하려면 ArrayList의 contains(value) 메서드를 사용하시면 됩니다. 만약 값이 존재한다면 true가 리턴되고, 값이 존재하지 않으면 false가 리턴됩니다. 값이 존재하는 index를 찾으려면 indexOf(value) 메서드를 사용하면 되고 만약 값이 존재하지 않는다면 -1을 리턴합니다.


참고 자료 출처

1. 코딩팩토리

댓글