본문 바로가기

Basic/자료구조,알고리즘

Java의 ArrayList 사용법

반응형

1. ArrayList


Java에서 ArrayList는 가장 많이 사용되는 데이터 스트럭쳐일 것이다.


Java의 콜렉션 프레임워크 라이브러리안에 ArrayList를 기본적으로 내장하고 있다. 


ArrayList는 List인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용한다는

특징을 갖는다.  


ArrayList는 기존의 Vector를 개선한 것으로 Vector와 구현원리와 기능적인 측면에서 동일하다고 할 수 있다.


2. ArrayList의 생성자와 메소드


https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html



3. ArrayList의 기본적인 예제 코드


1
2
3
4
5
6
7
public class ArrayList extends AbstractList
    implements List, RandomAccess, Cloneable, java.io.Serializable
{
    ...
        transient Object[] elementData; // Object배열
    ...
}
cs


위의 코드는 ArrayList의 소스코드 일부인데, ArrayList는 elementData라는 이름의 Object배열을 


멤버변수로 선언하고 있다는 것을 알 수 있다. 선언된 배열의 타입이 모든 객체의 최고조상인 


Object이기 때문에 모든 종류의 객체를 담을 수 있다. 이렇게 ArrayList는 Object배열을 이용해


서 데이터를 순차적으로 저장한다. 예를 들면, 첫 번째로 저장한  객체는 Object배열의 0번째 위


치에 저장되고 그 다음에 저장하는 객체는 1번째 위치에 저장된다.


이런 식으로 계속 배열에 순서대로 저장되며, 배열에 더 이상 저장할 공간이 없으면 보다 큰 


새로운 배열을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음에 저장된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package Arraylist;
    import java.util.ArrayList;//임포트 해주자
    
    public class ArrayListApi {
      public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();//ArrayList 객체 생성
 
        numbers.add(10);
        //add는 배열에 단순히 더해지는 것이기 때문에 빠르게 동작한다.
        numbers.add(20);//마지막에 추가
        numbers.add(30);
        
        System.out.println("add(값)");
        System.out.println(numbers);
        
        numbers.add(035);//0번째에 추가
        System.out.println("add(값)");
        System.out.println(numbers);
        
        numbers.add(150);//1번째에 추가
        System.out.println("add(인덱스, 값)");
        System.out.println(numbers);
        System.out.println();
 
        System.out.println(numbers.remove(2));//삭제후 삭제값 10 리턴
        System.out.println("remove(인덱스)");
        System.out.println(numbers);
 
        System.out.println("\nget(인덱스)");
        System.out.println(numbers.get(2));//인덱스2번째 가져오기
 
        System.out.println("\nsize()");
        System.out.println(numbers.size());//엘리먼트의 갯수 가져오기
 
        System.out.println("\nindexOf()");
        System.out.println(numbers.indexOf(30));//30의 인덱스 위치 가져오기
        
        System.out.println("remove(numbers.size()-1))");
        System.out.println(numbers.remove(numbers.size()-1));//마지막 삭제
        
    }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
add(값)
[102030]
add(값)
[35102030]
add(인덱스, 값)
[3550102030]
 
10
remove(인덱스)
[35502030]
 
get(인덱스)
20
 
size()
4
 
indexOf()
3
remove(numbers.size()-1))
30
 
cs



위처럼 ArrayList나 Vector 같이 배열을 이용한 자료구조는 데이터를 읽어오고 저장하는 데는 효율


이 좋지만,용량을 변경해야할 때는 새로운 배열을 생성한 후 기존의 배열로부터 새 로 생성된 배


열로 데이터를 복사해야하기 때문에 상당히 효율이 떨어진다는 단점을 가지고 있다. 그래서 처음


에 인스턴스를 생성할 때, 저장할 데이터의 개수를 잘 고려하여 충분한 용량의 인스턴스를 생성하


는 것이 좋다.


 

4. ArrayList를 탐색하기 위한 방법 iterator


자바에서는 ArrayList를 탐색하기 위한 방법으로 iterator를 제공한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package Arraylist;
    import java.util.ArrayList;
    import java.util.Iterator;//임포트 해주자
    
    public class ArrayListApi2 {
      public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();
 
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);
        System.out.println(numbers);
                
        Iterator it = numbers.iterator();
        /*Iterator 객체는 numbers 객체 내부에 저장된 값을 하나씩
            순회하면서 탐색할 수 있도록 돕는 객체이다*/
        System.out.println("iterator");
        
        while (it.hasNext()) {
        //만약 더 이상 순회할 엘리먼트가 없다면 it.hasNext()의 리턴값은 false가 되면서 while문이 종료
            int value = (int) it.next();
            //it.next()메소드를 호출할 때마다 엘리먼트를 순서대로 리턴
            if (value == 30) {
                it.remove();//순회 과정에서 조건에 따라 엘리먼트를 삭제
            }
            System.out.println(value);//순회 출력
        }
        System.out.println(numbers);
 
        System.out.println("for each");
            for (int value : numbers) {//조금 더 편리한 방법으로 탐색
                System.out.println(value);
            }
        System.out.println("for");//조금 더 편리한 방법으로 탐색
            for (int i = 0; i < numbers.size(); i++) {
                System.out.println(numbers.get(i));
            }
    }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
[102030]
iterator
10
20
30
[1020]
for each
10
20
for
10
20
cs



반응형

'Basic > 자료구조,알고리즘' 카테고리의 다른 글

Linked list 와 Doubly linked list 의 개념과 차이점  (0) 2018.11.29
ArrayList 직접 구현  (0) 2018.11.29
ArrayList(어레이 리스트)  (1) 2018.11.29
배열과 리스트2  (0) 2018.11.29
배열과 리스트1  (0) 2018.11.29