ArrayList

hwibaski·2022년 7월 31일

Java

목록 보기
1/7

ArrayList란?

ArrayList는 Java Collection 프레임워크의 일부이며 java.util 패키지에 소속되어 있다.

List 인터페이스의 구현 중 하나로 Resizable한 것이 특징이다. (확장 가능한 배열)

ArrayList는 Thread safe하지 않고, Vector는 Thread safe 하다. -> ArrayList의 객체는 여러 명이 값을 변경하려고 하면 문제가 발생할 수 있고, Vector는 그렇지 않다는 것.

ArrayList의 상속 관계

java.lang.Object
	java.util.AbstractCollection<E>
		java.util.AbstractList<E>
			java.util.ArrayList<E>


이미지 출처

ArrayList 값 추가하기

  1. add(E element)
  • Generic을 사용할 시 E 타입이고 non-generic ArrayList는 E 타입 자리에 Object 타입이 온다. Object 타입은 자바에서 모든 타입의 상위 타입이므로 무슨 타입이든지 올 수 있다.
    하지만 ArrayList 타입인 ArrayList에서는 타입에 의해 add(E element)의 타입이 결정되므로 ArrayList으로 ArrayList를 초기화했다면 add() 메서드에도 String 타입을 인자로 받아야 한다.

  1. add(int index, E element)
  • index 자리에 element를 추가한다.

  1. addAll(Collection<? extends E> c)
  • 매개 변수로 넘어온 컬렉션 데이터를 가장 끝에 담는다.

  1. addAll(int index, Collection<? extends E> c)
  • 매개 변수로 넘어온 컬렉션 데이터를 index에 지정된 위치부터 담는다.


'<? extends E>' 는 c 매개변수의 타입이 E와 E를 상속하는 자식 클래스가 됨을 의미한다. 제네릭 참고 링크

import java.util.ArrayList;

public class ListSample {
    public static void main(String[] args) {
    	// ArrayList로 타입을 정해주었지만, 추후에 Vector나 다른 클래스로 변경을 위해서 List<>로 타입을 지정해주면 유연하게 사용 가능하다.
        ArrayList<String> arrayList = new ArrayList<>();

        arrayList.add("hello");
        arrayList.add("world");
  		arrayList.add(1, "Java is too hard")
        System.out.println("arrayList = " + arrayList);
    }
}
//   결과
//   arrayList = [hello, Java is too hard, world]

ArrayList 값 꺼내기

  1. get(int index)
  • 매개 변수에 지정한 위치에 있는 데이터를 리턴한다.
  1. toArray(T[] a)
  • ArrayList 객체에 있는 값들을 매개 변수로 넘어온 T 타입의 배열로 만든다.
  1. toArray()
  • ArrayList 객체에 있는 값들을 Object[] 타입의 배열로 만든다.

여기서 중요한 것은 매개 변수가 없는 toArray() 메서드는 Object 타입의 배열로만 리턴을 한다. 그러므로 제네릭을 사용한 ArrayList를 배열로 생성핼 때에 이 메서드를 사용하는 것은 좋지 않다. - 자바의 신 p.603-

import java.util.ArrayList;
import java.util.Arrays;

public class ListSample {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();

        arrayList.add("hello");
        arrayList.add("world");
        arrayList.add(1, "Java is too hard");
        System.out.println("arrayList = " + arrayList);
        System.out.println("size = " + arrayList.size());
        String[] list = arrayList.toArray(new String[3]);
        System.out.println("list = " + Arrays.toString(list));
        System.out.println("list = " + list);

		String firstEl = arrayList.get(0);
        System.out.println("firstEl = " + firstEl);
    }
}

// 결과
// arrayList = [hello, Java is too hard, world]
// size = 3
// list = [hello, Java is too hard, world]
// list = [Ljava.lang.String;@96532d6
// firstEl = hello

ArrayList에 있는 데이터 삭제

1. clear()

  • 모든 데이터를 삭제한다

2. remove(int index)

  • 지정한 위치에 있는 데이터를 삭제, 삭제한 데이터를 리턴한다.

3. remove(Object o)

  • 매개 변수에 넘어온 객체와 동일한 첫 번째 데이터를 삭제한다.

4. removeAll(Collection<?> c)

  • 매개 변수로 넘어온 컬렉션 객체에 있는 데이터와 동일한 모든 데이터를 삭제한다.
import java.util.ArrayList;
import java.util.Arrays;

public class ListSample {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();

        arrayList.add("A");
        arrayList.add("B");
        arrayList.add("C");
        arrayList.add("D");
        arrayList.add("E");
        arrayList.add("A");

        arrayList.remove(1); // arrayList = [A, C, D, E, A]
        arrayList.remove("A"); // arrayList = [C, D, E, A]
        ArrayList<String> tempList = new ArrayList<>();
        tempList.add("A");
        tempList.add("C");
        arrayList.removeAll(tempList); // arrayList = [D, E]
    }
}

ArrayList 값 변경하기

1. set(int index, E element)

  • index 자리의 요소를 element로 변경한다.

ArrayList 탐색 관련

1. size()

  • ArrayList 객체에 들어가 있는 데이터의 개수를 리턴

2. indexOf(Object o)

  • 매개 변수로 넘어온 객체와 동일한 데이터의 위치를 리턴한다.

3. lastIndexOf(Object o)

  • 매개 변수로 넘어온 객체와 동일한 마지막 데이터의 위치를 리턴한다.

배열, String의 길이 및 개수를 가져올 때는 .length를 사용하지만 Collection을 구현한 인터페이스는 size() 메소드를 통해서 데이터의 개수를 확인 가능하다.

ArrayList 할당 공간 정리하기

  1. trimToSize()
  • ArrayList 객체 공간의 크리르 데이터의 개수만큼으로 변경. ArrayList를 원격으로 전송하거나, 파일로 저장할 시 데이터의 크기를 줄일 수 있다.

Reference

자바의신 vol.2 - 책 링크
https://crazykim2.tistory.com/558
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ArrayList.html
https://blog.naver.com/PostView.nhn?blogId=zzang9ha&logNo=222060882573&categoryNo=10&parentCategoryNo=0&viewDate=¤tPage=2&postListTopCurrentPage=&from=thumbnailList&userTopListOpen=true&userTopListCount=10&userTopListManageOpen=false&userTopListCurrentPage=2

0개의 댓글