[Java] ArrayList 클래스

이상현·2023년 10월 10일
0

Java

목록 보기
3/21
post-thumbnail

ArrayList의 인터페이스인 List와 Collection에 대해서는 [Java] Collection 프레임워크 게시글을 참고하세요.

ArrayList

ArrayList는 List 인터페이스를 구현하기 때문에, 데이터의 순서가 유지되고, 데이터의 중복이 가능하고,
c++ 언어의 vector과 유사하다.

ArrayList는 Object 배열을 이용해서 데이터를 순차적으로 저장한다.

ArrayList 생성자

  • ArrayList()
    크기가 0인 ArrayList 생성
  • ArrayList(int initialCapacity)
    초기용량이 initialCapacity인 ArrayList 생성
    미리 여유있게 용량을 설정해주면 작동중에 용량를 확장하는 것 보다 처리시간에서 이득을 본다.
  • ArrayList(Collection<? extends E> c)
    컬렉션 c가 저장된 ArrayList 생성

ArrayList의 메서드

  • void add(int index, E element)
    index 위치에 E 추가

  • boolean add(E e)
    맨 뒤에 E 추가

  • boolean addAll(int index, Collection<? extends E> c)
    index 위치부터 컬렉션 c의 모든 객체를 추가

  • boolean addAll(Collection<? extends E> c)
    맨 뒤에 컬렉션 c의 모든 객체를 추가

  • void clear()
    모든 객체를 삭제한다.

  • Object clone()
    Returns a shallow copy of this ArrayList instance.

  • boolean contains(Object o)
    객체 o가 포함되어있는지 확인한다.

  • void ensureCapacity(int minCapacity)
    ArrayList의 요양이 최소한 minCapacity가 되도록 한다.

  • E get(int index)
    index 위치의 요소를 반환한다.

  • int indexOf(Object o)
    객체 o와 일치하는 첫 번째 요소의 인덱스를 반환한다.
    일치하는 객체가 없을 시 -1 반환

  • int lastIndexOf(Object o)
    객체 o와 일치하는 뒤에서 첫 번째 요소의 인덱스를 반환한다.
    일치하는 객체가 없을 시 -1 반환

  • boolean isEmpty()
    ArrayList이 비어있으면 true 반환

  • Iterator<E> iterator()
    ArrayList의 요소들을 iterator로 반환한다.

  • ListIterator<E> listIterator()
    ArrayList의 ListIterator 반환

  • ListIterator<E> listIterator(int index)
    ArrayList의 index 부터 시작하는 ListIterator 반환

  • E remove(int index)
    index 위치의 요소를 삭제하고 반환한다.

  • boolean remove(Object o)

  • boolean removeAll(Collection<?> c)
    ArrayList에서 객체 o 또는 컬렉션 c에 포함된 객체들을 삭제한다. (차집합)

  • protected void removeRange(int fromIndex, int toIndex)
    위치가 fromIndex 부터 toIndex -1 인 객체들을 삭제한다.

  • boolean retainAll(Collection<?> c)
    컬렉션 c에 포함된 객체만을 남기고 다른 객체들은 삭제한다. (교집합)
    기존 컬렉션에 변화가 있으면 true 반환

  • E set(int index, E element)
    index 위치에 요소를 저장하고 원래 있던 요소를 반환한다.

  • int size()
    ArrayList에 저장된 객체의 개수를 반환한다.

  • List<E> subList(int fromIndex, int toIndex)
    위치가 fromIndex 부터 toIndex -1 인 객체들을 리스트로 추출한다.

  • Object[] toArray()
    ArrayList의 모든 요소를로 객체 배열로 반환한다.

  • <T> T[] toArray(T[] a)
    ArrayList의 모든 요소를로 객체 배열a에 담아서 반환한다.

  • void trimToSize()
    용량의 크기에 맞게 빈 공간을 없앤다.

사용 예제

import java.util.ArrayList;
import java.util.Collections;

public class Main {
    public static void main(String[] args) {
    	// 형식을 Integer로 지정하고, 5, 2 요소 두개를 넣어준 ArrayList
        ArrayList<Integer> list1 = new ArrayList<>(List.of(5, 2));

        list1.add(4);
        list1.add(0);
        list1.add(3);
        
        // 형식 지정 안한 ArrayList. Object타입이 된다.
        ArrayList list2 = new ArrayList(list1.subList(1, 4));
        System.out.println(list1); // [5, 2, 4, 0, 3]
        System.out.println(list2); // [2, 4, 0]

        Collections.sort(list1); // 정렬
        list2.sort(null); // 정렬. 위 정렬과 동일 효과

        System.out.println(list1); // [0, 2, 3, 4, 5]
        System.out.println(list2); // [0, 2, 4]

        System.out.println("list1.containsAll(list2): " + list1.containsAll(list2)); // true

        list2.add("B"); // 형식 지정 안해줬으므로 Integer와 String 모두 저장 가능
        list2.add("C");
        list2.add(3, "A");
        list2.set(1, "D");

        System.out.println(list1); // [0, 2, 3, 4, 5]
        System.out.println(list2); // [0, D, 4, A, B, C]

        // list1에서 list2와 겹치는 부분만 남김
        System.out.println("list1.retainAll(list2): " +list1.retainAll(list2)); // 변경된 부분이 있으므로 true

        System.out.println(list1); // [0, 4]
        System.out.println(list2); // [0, D, 4, A, B, C]

        // list2에서 list1에 포함된 객체 삭제
        
        for(int i = list2.size() - 1; i >= 0; i--) {
            if (list1.contains(list2.get(i))) {
                list2.remove(i);
            }
        }
        // 인덱스를 0 부터 siez()-1 까지 증가시키며 삭제하면 삭제할 때 마다
        // 빈 공간을 채우기 위해뒤의 요소들이 앞으로 당겨지기 때문에 오류가 발생한다.
        // 그래서 size-1 부터 0 까지 감소시키는 방식으로 작성했다.

        System.out.println(list1); // [0, 4]
        System.out.println(list2); // [D, A, B, C]

		// list2는 object 타입이므로 요소를 꺼내어서 사용할때 형변환 해줘야함
        String s = (String) list2.get(1);
        System.out.println(s + "PPLE"); // APPLE
    }
}

0개의 댓글