본문 바로가기

JAVA

컬렉션 프레임워크(Collection Framework) (1) - 리스트(List)

1. 컬렉션 프레임워크 (Collection Framework)


자바에서 List, Set, Queue 는 Collection 이라는 인터페이스를 구현하고 있다. Collection 인터페이스는 java.util 패키지에 선언 되어 있고, 여러개의 객체를 하나의 객체에 담아 처리할때 사용되는 여러 메소드들을 선언해 놓았다.

이중에 Map은 Collection 인터페이스와는 관계 없이 선언되어 있다. 

 

2. ArrayList


만약 여러분이 데이터를 10개를 담아놓은 배열을 사용하는 중 데이터를 더 담아햐 하는경우 어떻게 할 것 인가? 물론 다양한 방법이 존재할 것이다. 하지만 자바에서는 배열을 사용하여 데이터를 담아놓는 것과는 다르게 ArrayList는 '확장이 가능한 배열' 로써 데이터를 담아 두는 것이 가능하다.

 

  • 데이터를 담는 메소드 add(E e), addAll(Collection<? extends E> c)

  ArrayList를 선언하여 add 메소드를 사용해 데이터를 담아보자

public class ArrayListCheck {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        for (String str : list){
            System.out.println(str);
        }
    }
}

 

실행 화면

ArrayList를 선언할때 제네릭을 사용하여 list에 담길 데이터의 타입을 지정해줄 수 있다. 이는 사전에 다른 타입의 데이터가 들어가는 것을 방지할 수 있다. ArrayList에 담긴 데이터는 배열과 마찬가지로 순서가 존재하며 반복문을 통해서 이를 확인할 수 있다.

 

또한 Collection 객체 자체를 한번에 담는 addAll 메소드를 사용해 보자.

 

public class ArrayListCheck2 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        ArrayList<String> list2 = new ArrayList<>();

        list2.add("a");
        
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");

        list2.addAll(list);
        list2.add("b");

        for (String str : list2){
            System.out.println(str);
        }
    }
}

 

실행 화면

list2에 문자열을 하나 담아두고 새로운 ArrayList 객체를 생성하여 list2에 담아두고 출력하였다.

add() 메소드와 동일하게 순서대로 데이터가 담기는 것을 확인할 수 있다.

 

  • 데이터를 꺼내오는 메소드 get(int index)
public class ArrayListCheck {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        for (int i=0; i < list.size(); i++){
            System.out.println(list.get(i));
        }
    }
}

 

실행 화면

add() 메소드를 사용했었던 반복문을 조금 다른방식으로 사용하였다. 위 코드와 같이 ArrayList 는 get() 이라는 메소드를 사용하여 인덱스 값을 매개변수로 넘겨 해당 인덱스에 담겨있는 데이터를 반환한다. 반복문에서 size() 메소드를 사용하였는데 이는 배열의 length와 같은 기능으로 현재 ArrayList의 길이를 반환한다.

 

또한 매개변수로 넘어온 객체와 동일한 데이터의 위치를 반환하는 메소드인 indexOf(Object o), lastIndexOf(Object o) 가 있다. indexOf() 메소드는 앞에서부터 찾을 때, lastIndexOf() 메소드는 뒤에서부터 찾을 때 사용한다.

 

  • 데이터를 삭제하는 메소드 remove(int index)

ArrayList에는 메소드의 데이터를 깔끔하게 지우는 clear() 메소드와, 지정된 index를 매개변수로 넘겨 위치에 있는 데이터를 삭제하는 remove 메소드가 있다.

public class ArrayListCheck {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        list.remove(0);

        for (String str : list){
            System.out.println(str);
        }
    }
}

 

실행 화면