Computer Science/DataStructure

ArrayList

ArrayList란?

Array List는 배열을 이용해서 리스트를 구현한 것을 의미한다.

장점은 내부적으로 배열을 이용하기 때문에 인덱스를 이용해서 접근하는 것이 빠르다.

하지만 데이터의 추가와 삭제가 느리다.

 

List 인터페이스의 구현 클래스이며,  ArrayList에 객체를 추가하면 객체가 인덱스로 관리된다.

크기가 가변적으로 변하는 선형 리스트이다.

일반 배열과 ArrayList는 순차리스트이며, 인덱스로 객체를 관리한다는 점에서 유사하나 큰 차이점이 있다.

배열은 생성시 크기가 고정되고 사용 중에 크기를 변경할 수 없지만,

ArrayList는 저장 용량(capacity)을 초과한 객체들이 들어오면 자동적으로 저장 용량(capacity)이 늘어난다.

 

List<E> list = new ArrayList<E>();

 

데이터 추가

index가 1, value가 50인 element를 추가할 시 다음과 같이 값이 밀려나는 과정이 필요하다.

 

데이터 삭제

index가 2, value가 30인 element를 삭제할 시 다음과 같이 값을 땡기는 과정이 필요하다.

Array와 비교

비교 군 Array ArrayList
크기 초기화시 고정 초기화시 사이즈를 표시하지 않음.
사이즈가 동적이다.
실행 속도 초기화 시 메모리(heap)에 할당되어
속도가 빠름
추가시 메모리를 재할당하여 속도가 느림
크기 변경 변경 불가 추가, 삭제 가능
다차원 가능 불가능
타입 primitive type(int,byte, char etc), object object elemnet만 가능
제네릭 사용 불가능 사용 가능(타입 안정성 보장)
길이 length 변수 size() 메서드
변수 추가 assignment 연산자 사용 add() 메소드 사용

 

언제 사용?

배열과 비교하면

데이터의 크기를 동적으로 변경할 때

제네릭을 이용한 타입 안정성 보장이 필요할 때

 

제네릭이란?

클래스 내부에서 사용할 데이터 타입을 인스턴스 생성시 확정하는 것을 제네릭이라 한다.

제네릭은 다양한 타입의 객체를 다루는 메소드 및 컬렉션 클래스를 컴파일 시, 타입 체크를 해주는 기능을 한다.

객체 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄인다.

 

LinkedList와 비교하면

객체 삭제와 삽입이 최소한으로 사용되며 검색이 많이 요구될 때

(맨 마지막에 객체를 추가하는 경우는 ArrayList가 더 좋은 성능을 발휘)

 

JAVA API

/* package whatever; // don't place package name! */
 
import java.util.*;
import java.lang.*;
import java.io.*;
 
/* Name of the class has to be "Main" only if the class is public. */
class ArrayList
{
	public static void main (String[] args) throws java.lang.Exception
	{
		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));
 
		Iterator<Integer> it = numbers.iterator();
		System.out.println("\niterator");
		while(it.hasNext()){
			int value = it.next();
			if(value == 30){
				it.remove();
			}						
		}
		System.out.println(numbers);
 
		System.out.println("\nfor each");
		for(int value : numbers){
			System.out.println(value);
		}
	}
}

add(값)
[10, 20, 30, 40]

add(인덱스, 값)
[10, 50, 20, 30, 40]

remove(인덱스)
[10, 50, 30, 40]

get(인덱스)
30

iterator
[10, 50, 40]

for each
10
50
40

 

 

코드 구현

github.com/devjun63/DataStructure/blob/master/src/list/arraylist/implementation/ArrayList.java

 

devjun63/DataStructure

422 Unprocessable Entity - Repository creation failed. [Repository; description]custom: description control characters are not allowed - devjun63/DataStructure

github.com

github.com/devjun63/DataStructure/blob/master/src/list/arraylist/implementation/Main.java

 

devjun63/DataStructure

422 Unprocessable Entity - Repository creation failed. [Repository; description]custom: description control characters are not allowed - devjun63/DataStructure

github.com

 

 

 

 

 

 

 

참조

 

opentutorials.org/module/1335/8709

 

Array List - Data Structure (자료구조)

소개 Array List는 배열을 이용해서 리스트를 구현한 것을 의미합니다. 장점은 내부적으로 배열을 이용하기 때문에 인덱스를 이용해서 접근하는 것이 빠릅니다. 하지만 데이터의 추가와 삭제가 느

opentutorials.org

 

velog.io/@humblechoi/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Array-vs-ArrayList

 

[자료구조] Array vs ArrayList

Array와 ArrayList은 모든 것이 비슷합니다. 가장 큰 차이점은 길이를 조정할 수 있는가? 없는가? 입니다.Java의 Array는 고정 길이 입니다. 따라서, 정해진 길이의 배열을 모두 채우면, 새로운 데이터를

velog.io

 

'Computer Science > DataStructure' 카테고리의 다른 글

Implement Linked List  (0) 2021.04.26
Linked List (연결 리스트)  (0) 2021.03.07
List (리스트)  (0) 2021.02.25
Array (배열)  (0) 2021.02.25
Data Structure란?  (0) 2021.02.25