그해
그래도해야지
그해
  • 그래도 해야지 (71)
    • Java (26)
    • Spring (8)
    • Golang (3)
    • CS (0)
      • 서버 (9)
      • 네트워크 (4)
      • 운영체제 (1)
      • WEB (0)
      • 데이터베이스 (6)
      • 자료구조 (1)
      • 보안 (3)
      • 알고리즘 (9)
    • 삽질 (0)
    • 회고 및 생각 (0)
hELLO · Designed By 정상우.
그해

그래도해야지

Java

[Java] ArrayList

2023. 12. 6. 23:07

1. ArrayList

ArrayList는 List 인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고, 중복을 허용한다는 특징을 갖는다. ArrayList는 Object 배열을 이용해 데이터를 순차적으로 저장한다. 배열에 더 이상 저장할 공간이 없으면 보다 큰 새로운 배열을 생성해 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음에 저장한다.

메서드 설명 
ArrayList() 크기가 10인 ArrayList를 생성(디폴트)
ArrayList(Collection c) 주어진 컬렉션이 저장된 ArrayList를 생성
ArrayList(int initialCapacity) 지정된 컬렉션이 저장된 ArrayList를 생성
boolean add(Object o) ArrayList에 마지막에 객체를 추가. 성공하면 true
void add(int index, Object element) 지정된 index에 객체를 저장
boolean addAll(Collection c) 주어진 컬렉션의 모든 객체를 저장, 즉 붙이기
void clear() ArrayList를 완전히 비운다.
Object clone() ArrayList를 복제한다.
boolean contains(Object o) 지정된 객체(o)가 ArrayList에 포함되어있는지 확인
void ensureCapacity(int minCapacity) ArrayList의 용량이 최소한 minCapacity에 포함되어 있는지 확인
Object get(int index) index에 저장된 객체를 반환
int indexOf(object o) 지정된 객체가 저장된 위치를 찾아 반환
boolean isEmpty() ArrayList가 비어있는지 확인
Iterator iterator() ArrayList의 Iterator객체를 반환
int lastIndexOf(Object o) 객체 o가 저장된 위치를 역방향으로 검색해서 반환
ListIterator listIterator() ArrayList의 ListIterator 반환
ListIterator listIterator(int index) ArrayList의 지정된 위치부터 시작하는 ListIterator 반환
Object remove(Object o) 지정한 객체를 제거
boolean remove(Object o) 지정한 객체를 제거
boolean removeAll(Collection c) 지정한 컬렉션에 저장된 것과 동일한 객체들을 ArrayList에서 제거
boolean retainAll(Collection c) ArrayList에 저장된 객체 중에서 주어진 컬렉션과 공통된 것들만 남기고 다 삭제
Object set(int index, Object elemet) 주어진 객체를 지정된 index에 저장
int size() ArrayList에 저장된 객체의 개수 반환
void sort(Comparator c) 지정된 정렬기준으로 ArrayList 정렬
(Comparator은 Comparable 인터페이스가 없거나 기본적인 정렬 순서와는 다른 방식으로 객체를 정렬해야할 경우에 사용한다.)
List subList(intfromIndex, int toIndex) fromIndex 부터 toIndex까지에 저장된 객체를 반환
Object[] toArray() ArrayList에 저장된 모든 객체들을 객체배열로 반환
Object[] toArray(Object[] a) ArrayList에 저장된 모든 객체들을 객체배열 a에 담아 반환
void trimToSize() 용량을 크기에 맞게 줄인다. 즉 빈 공간을 없앤다.
   
//ArrayList 선언 
ArrayList<String> a1 = new ArrayList<String>(); //타입지정해서 선언,기본 capacity는 10
a1.add("A"); //ArrayList 마지막에 객체 추가
a1.add("B");
ArrayList<String> a2= new ArrayList<String>(50); //초기 capacity를 50으로
a2.add("C");
ArrayList<String> a3= new ArrayList<String>(a1); //주어진 Collection을 초기값으로 생성

//붙이기 addAll
System.out.println(a2.addAll(a3)); //a2 +a3 -> true
System.out.println(a2); //[C, A, B]

//복제 clone
Object a4 = a2.clone();
System.out.println(a4); //[C, A, B]

//컬렉션에 저장된 것과 동일한 객체들을
a2.removeAll(a3); // [C, A, B] - [A,B] = [C]
System.out.println(a2);


- 예제 11-2) 긴 문자열 데이터를 원하는 길이로 잘라서 ArrayList에 담은 다음 출력

public static void main(String[] args) {
    final int LIMIT = 10; //자르고자 하는 글자 개수
    String source = "0123456789abcdefghijABCDEFGHIJ!@#$%^&*()ZZZ";
    int length = source.length();

    //초기 용량이 14인 리스트
    ArrayList<String> list = new ArrayList<>(length / LIMIT + 10); //여유있게 크기 잡기 48/10 + 10 = 14

    for (int i = 0; i < length; i += LIMIT) { //i = 0,10, 20, 30,40
        if (i + LIMIT < length) {
            //add는 ArrayList 마지막에 객체 추가
            list.add(source.substring(i, i + LIMIT));
        } else {
            list.add(source.substring(i));
        }
    }
    System.out.println(list);
}

+ Array와 ArrayList의 차이

Array와 ArrayLIst는 모든 것이 비슷하나, 가장 큰 차이점은 길이를 조정할 수 있는가 없는가이다.

자바에서 Array는 고정길이이다. 초기화시 배열의 크기를 지정한다. 또한 정해진 길이의 배열을 모두 채우면, 새로운 데이터를 추가하고 싶을 경우 새로운 배열을 만들어줘야한다.

하지만 ArrayList는 List컬렉션 인터페이스의 한 종류로 가변길이이다. 즉 동적으로 사이즈가 늘어난다. 하지만 내부적으로 Array로 구성되어 있다. ArrayList는 디폴트로 10개의 공간을 가진 배열로 시작한다. 따라서 기존 사이즈 이상으로 add()함수를 이용해 추가하려고하면 기존 배열 크기의 1.5배(기존용량 + 기존용량/2)로 resize해 새로운 배열을 만들어서 기존배열을 copy한다. 이런 원리로 ArrayList가 동적으로 크기가 늘어날 수 있는 것이다.


출처 : 자바의 정석

'Java' 카테고리의 다른 글

[Java] Stack과 Queue  (1) 2023.12.06
[Java] LinkedList  (1) 2023.12.06
[Java] 컬렉션 프레임워크 (Collection Framework)  (1) 2023.12.06
[JAVA] 다차원 배열  (0) 2023.12.06
[Java] String 배열  (0) 2023.12.06
    'Java' 카테고리의 다른 글
    • [Java] Stack과 Queue
    • [Java] LinkedList
    • [Java] 컬렉션 프레임워크 (Collection Framework)
    • [JAVA] 다차원 배열
    그해
    그해
    그래도 공부는 해야지

    티스토리툴바