java/자료형

자바 ArrayList

appmaster 2019. 5. 25. 16:29

ArrayList는 자바에서 가장 많이 사용되는 데이터 스트럭쳐이다.

 

 

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

ArrayList는 java.util.ArrayList에 포함되어 있으므로 import 해준다.

 

 

추가

element를 추가할때는 add 메소드를 사용한다. add는 단순히 배열 뒤에 데이터를 더하기 때문에 빠르다.

numbers.add(19);
numbers.add(40);

자바 배열의 크기는 고정되어 있다. 내부의 배열이 꽉 찼는데 새로운 데이터를 추가하려면 기존 배열보다 2배 긴 새 배열을 만들어, 기존 데이터를 새로운 배열로 복제해야한다. 덕분에 프로그래머는 ArrayList의 크기를 신경쓰지 않아도 된다. 하지만 배열의 크기를 키우는 데는 많은 부하가 걸린다.

 

 

삭제

numbers.remove(2);

 

 

가져오기

특정 인덱스에 위치한 엘리먼트를 가져올 떄는 get을 사용한다. 이때 내부에서 배열을 사용하기 때문에 ArrayList는 매우 빠르게 엘리먼트를 가져온다.

numbers.get(2);

 

 

반복

ArrayList를 탐색할 때는 Iterator를 쓴다. Iterator는 객체지향 프로그래밍에서 주로 사용하는 반복 기법입니다. Iterator를 쓰려면 우선 Iterator 객체를 만들어야 한다.

Iterator it<Integer> = numbers.iterator();

Iterator 객체를 쓰면 numbers 객체에 저장된 값을 하나씩 순회할 수 있다.

while(it.hasNext()){
    System.out.println(it.next());
}

it.next() 메소드는 호출될 때마다 엘리먼트를 순서대로 리턴한다. 만약 더이상 순회할 엘리먼트가 없다면 it.hasNext()는 false를 리턴해 while문은 종료된다. Iterator는 엘리먼트를 삭제/추가할 때도 쓸수 있다.

while(it.hasNext()){
    int value = it.next();
    if(value == 30){
      it.remove();
      }
  }

it.remove()는 it.next()를 통해서 반환된 numbers의 엘리먼트를 삭제한다. Iterator보다 조금 더 편리하게 엘리먼트를 순회하는 방법도 있다.

for(int value : numbers){
   System.out.println(value);
}

 

 

범위 표시 하는 방법

Array같은 경우에는 Array변수이름.length 을 사용했지만, ArrayList는 아니다.
for (int i = 0; i<numbers.size() ; i++){

이런식으로 범위를 표현하는 방법이 다르다.

 

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

public class list {

    public static void main(String[] args) {

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

        numbers.add(10);
        numbers.add(20);
        numbers.add(30);
        numbers.add(40);
        System.out.println("add(값)");
        System.out.println(numbers);

        numbers.add(1, 50);
        System.out.println("\nadd(인덱스, 값)");
        System.out.println(numbers);

        numbers.remove(2);
        System.out.println("\nremove(인덱스)");
        System.out.println(numbers);

        System.out.println("\nget(인덱스)");
        System.out.println(numbers.get(2));

        System.out.println("\nsize()");
        System.out.println(numbers.size());

        System.out.println("\nindexOf()");
        System.out.println(numbers.indexOf(30));

        Iterator it = numbers.iterator();
        System.out.println("\niterator");
        while (it.hasNext()) {
            int value = (int) it.next();
            if (value == 30) {
                it.remove();
            }
            System.out.println(value);
        }
        System.out.println(numbers);

        System.out.println("\nfor each");
        for (int value : numbers) {
            System.out.println(value);
        }
        System.out.println("\nfor");
        for (int i = 0; i < numbers.size(); i++) {
            System.out.println(numbers.get(i));
        }

    }

}

'java > 자료형' 카테고리의 다른 글

배열의 특징 추가  (0) 2019.07.16
List 추가정리  (0) 2019.07.09
(자바) 배열값 복사 & 복제  (0) 2019.04.24
자바 ArrayList  (0) 2019.04.08
자바 자료형의 종류  (0) 2019.04.08