IT 개발/Java

[Java] 자바 - ArrayList 사용방법 (개념, 특징, 메소드 및 예제)

KADOSHOLY 2022. 7. 27. 11:15
반응형

 

자바 - ArrayList 사용방법 (개념, 특징, 메소드 및 예제)

 

 

자바에서 기본적으로 여러 데이터를 다룰때 배열을 사용합니다. 그런데 배열은 처음 정의할때 그 길이를 한번 지정하게 되면 나중에 변경할 수가 없다는 단점이 있습니다. 반면에 ArrayList는 추가되는 데이터의 수에 따라 그 길이가 자동으로 변경됩니다. 여기에서는 이러한 ArrayList의 특징 및 데이터의 추가, 삭제를 편리하게 해주는 메서드의 종류와 사용방법에 대해서 알아보도록 하겠습니다. 

 

 

   목차

  1. ArrayList란?
    • ArrayList vs 배열
    • ArrayList vs Vector
    • ArrayList vs LinkedList
  2. ArrayList 생성방법
  3. ArrayList 메소드
    • 데이터 추가 / 삭제 / 확인 / 반환 / 변경 / 기
  4. ArrayList 사용예제

 

 

1. ArrayList란?

 

ArrayList는 배열을 기반으로 한 컬렉션의 하나이며, 데이터를 추가, 삭제시 내부에서 동적으로 배열의 길이를 조절해 줍니다. ArrayList를 생성하게 되면 내부에서는 데이터를 저장하기 위한 Capacity 크기의 저장공간이 할당되며, 사용중 데이터의 크기가 이 Capacity의 크기를 넘어서게 되면 저장공간이 새롭게 할당됩니다.

 

ArrayList 데이터 삭제시

 

1) ArrayList vs 배열

배열은 길이가 고정된 반면 ArrayList는 배열의 길이를 자동으로 조절해주는 기능을 가지고 있어 가변적입니다.

 

2) ArrayList vs Vector

 ArrayList와 Vector는 멀티 스레드 환경을 위한 동기화를 제외하고는 거의 유사합니다. 다만, ArrayList는 동기화 처리가 되어 있지 않은 대신 그만큼 처리 속도가 빠릅니다. 

 

3) ArrayList vs LinkedList

ArrayList는 내부적으로 배열을 기반으로 하기 때문에 데이터의 위치 정보를 바로 알 수 있어 데이터를 읽는 속도가 LinkedList에 비해 빠릅니다. 대신 데이터를 중간에 삽입하거나, 삭제가 빈번한 경우에는 데이터의 이동없이 연결정보만을 가지고 있는 LinkedList가 더 효율적입니다. 

 

 

 

 

2. ArrayList 생성방법

 

  • (방법1) ArrayList<String> a1 = new ArrayList<String>( );      // 기본 capacity는 10
  • (방법2) ArrayList<String> a2 = new ArrayList<String>(50);   // 초기 capacity를 50으로 설정
  • (방법3) ArrayList<String> a3 = new ArrayList<String>(a1);   // 다른 컬렉션(a1)의 데이터를 초기값으로 설정

 

 

 

3. ArrayList 메소드

 

1) 데이터 추가

  1. boolean add(E e) : 리스트의 끝에 데이터 e를 추가합니다. 
  2. void add(int index, E element) : index의 위치에 데이터 element를 추가합니다. 
  3. boolean addAll(Collection<? extends E> c) : 리스트의 끝에 컬렉션 c의 모든 데이터를 추가합니다. 
  4. boolean addAll(int index, Collection<? extends E> c) : index의 위치에 컬렉션 c의 모든 데이터를 추가합니다.

 

2) 데이터 삭제

  1. void clear( ) : 리스트의 모든 데이터를 삭제합니다. 
  2. E remove(int index) : index의 위치에 있는 데이터를 삭제합니다. 
  3. boolean remove(Object o) : 리스트에서 Object o와 처음 일치하는 데이터를 삭제합니다. 
  4. boolean removeAll(Collection<?> c) : 리스트에서 컬렉션 c와 일치하는 모든 데이터를 삭제합니다. 
  5. boolean retainAll(Collection<?> c) : 리스트에서 컬렉션 c와 일치하는 데이터만 남기로 나머지는 삭제합니다. 

 

3) 데이터 확인

  1. int size( ) : 리스트의 데이터 개수를 반환합니다.  
  2. boolean isEmpty( ) : 리스트가 비어있는지 여부를 반환합니다. (비어있을 경우 true)
  3. boolean contains(Object o) : 리스트에 Object o가 포함되어 있는지 여부를 반환합니다. (포함된 경우 true)
  4. int indexOf(Obejct o) : 리스트에서 Object o와 처음 일치하는 데이터의 index 정보를 반환합니다. (없을경우 -1 반환)
  5. int lastIndexOf(Obejct o) : 리스트에서 Object o와 마지막으로 일치하는 데이터의 index 정보를 반환합니다. (없을경우 -1 반환)

 

4) 데이터 반환

  1. E get(int index) : 리스트에서 index의 위치에 있는 데이터를 반환합니다. 
  2. Object[ ] toArray( ) : 리스트의 모든 데이터가 포함된 Object 배열을 반환합니다.  
  3. <T> T[ ] toArray(T[ ] a) : 리스트의 모든 데이터를 배열 a에 담은 후 배열 a를 반환합니다. 

 

5) 데이터 변경

  1. E set(int index, E element) : index의 위치에 있는 데이터를 element로 변경합니다. 

 

6) 기타

  1. void trimToSize( ) : 리스트의 현재 size로 capacity를 조절합니다. 

 

 

 

4. ArrayList 사용예제

 

ArrayList<String> a1 = new ArrayList<String>();
a1.add("a");
a1.add("b");
a1.add("a");
a1.add("c");
a1.add(1, "A");
		
for (String s: a1) {
	System.out.print(s + "-");
}
		
System.out.println("");
System.out.println("[1]: " + a1.isEmpty());
System.out.println("[2]: " + a1.size());
System.out.println("[3]: " + a1.contains("A"));
System.out.println("[4]: " + a1.indexOf("a"));
System.out.println("[5]: " + a1.lastIndexOf("a"));
System.out.println("[6]: " + a1.get(2));
System.out.println("[7]: " + a1.set(2, "z"));
System.out.println("[8]: " + a1);
System.out.println("[9]: " + a1.remove(3));
System.out.println("[10]: " + a1);
		
for (int i=a1.size()-1; i >= 0; i--) {
	a1.remove(i);
}
		
System.out.println("[11]: " + a1);

[실행결과]
a-A-b-a-c-
[1]: false
[2]: 5
[3]: true
[4]: 0
[5]: 3
[6]: b
[7]: b
[8]: [a, A, z, a, c]
[9]: a
[10]: [a, A, z, c]
[11]: []

 

반응형