티스토리 뷰

자료구조

베니의 자료구조 - 배열 리스트(Array List)

사용자 개발자 베니 2019. 9. 15. 22:20

베니의 자료구조 - 배열 리스트(Array List)

베니는 생활코딩 이고잉님의 자료구조 강의, 구글링을 통해 자료구조를 공부하고 있습니다.  
인용하는 내용의 출처는 링크를 남겨놓고 있습니다.
도움 주신 모든분들께 감사드립니다!

생활코딩 이고잉님 , 초보몽키님의 개발공부로그  

목차

1. 정의

2. 특징

3. 활용

4. 베니의 생각

 

Array List는 Array의 특징과 List 둘 다의 특징을 가지고 있다.


1. 정의

Array List는 Array를 통해 List를 구현한 것이다.

2. 특징

(1) Index를 통해 값을 가져오는 것이 빠르다.

배열를 사용하여 리스트를 구현하였기 때문에 배열의 특징을 그대로 가지고 있습니다.

 

(2) 값을 추가하는 것과 삭제하는 것이 느리다.

배열에서는 값을 추가하거나 삭제를 할 때 뒤에 있는 Element들이 전부 이동을 해야하기 때문에 작업이 많이 소요 됩니다.

( 아래의 구현 부분 예제를 통해 좀 더 쉽게 이해하실 수 있습니다. )

 

(3) 크기 고정이 아닌 유동적입니다.

Array List는 Array를 이용하여 만들어졌지만 배열과 다르게 처음 선언한 공간의 크기를

유동적으로 줄이고 늘릴 수 있습니다.

 

하지만 Array List의 크기를 늘리는 방식은 1.5배 크기의 새로운 배열을 만들어서 원래의 배열을 clone을 통해

복사한 후 사용하는 것이기 때문에 공간이 10인 ArrayList에서 한 개의 Element만 add를 하여도

공간이 15개를 사용하며 이는 메모리를 낭비하는 것임을 알 수 있습니다.


3. 활용

(1) Array List 사용법

import java.util.ArrayList;  // # 사용하기 위해선 import가 먼저 필요합니다.

public class ArrayList {
	public void main(String[] args){
    	// # 인스턴스화를 통해 객체를 생성합니다. 
	// # <Integer>은 제네릭이라고 하는 것인데 나중에 자바 정리할 때 설명하겠습니다!
        ArrayList<Integer> numbers = new ArrayList(); 
        
    }
}

우선 ArrayList를 import 하고 인스턴스화를 통해 객체를 생성하여 사용합니다.

 

(2) add

add 함수는 배열 리스트에서 Element를 추가하는 함수입니다.

numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);

위와 같이 함수를 실행 시 실제 numbers라는 ArrayList의 Element들은

아래와 같이 나타나게 됩니다.

0 1 2 3
10 20 30 40

add 함수 1번에 Element 1개씩 추가되며 마지막 Index의 뒤에 추가가 된다는 것을 알 수 있습니다.

그리고 만약 인덱스 0과 1 사이에 값을 추가하고 싶다면 add 함수에 다음과 같이 인자값을 추가하면 됩니다.

number.add(1,15);

위와 같이 add 함수 실행 후

0 1 2 3 4
10 15 20 30 40

위와 같이 값이 추가되었으며 인덱스 1부터 3까지 다 1칸씩 뒤로 이동하였습니다.

System.out.print(number); // # 실행 시 [10, 15, 20, 30, 40] 이렇게 출력이 된다.
// # ArrayList 안에 toString 메서드를 통해 출력 시 보기 쉽게 나열하여 준다.

 

(3) remove

remove는 인자값으로 받는 index의 위치에 있는 값을 삭제합니다.

numbers.remove(2); // # index가 2인 값을 삭제한다.

 

위와 같이 remove 함수를 실행하면

0 1 2 3 4
10 15 20 30 40

빨간색 글씨로 보이는 index가 2번인 Element를 삭제한 후

0 1 2 3
10 15 30 40

이렇게 뒤에 있던 인덱스들이 앞으로 당겨지게 됩니다.

 

(3) get

인자값으로 받은 인덱스의 value 값을 가져옵니다.

System.out.print(numbers.get(2)); // # 실행 시 index 2의 value인 30이 출력이 된다.

(4) size

현재 Array List에 몇 개의 Element가 저장되어 있는지 알려줍니다.

System.out.print(numbers.size()); // # 현재 Element의 개수는 4개이므로 4가 출력이 된다.

(5) iterator

반복문을 사용하여 Array List의 Element 값만큼 출력 시 사용 됩니다.

Iterator it = numbers.iterator(); // Iterator 타입의 변수 it를 초기화

// it.hasNext()는 Array List인 numbers가 다음 element가 있을 때 true 없을 시 false를 반환
while(it.hasNext()){
	int value = it.next(); // 다음 값을 value
}

4. 베니의 생각

위 내용은 Array List의 특징과 중점적인 기능들에 대한 간략한 설명으로 내용을 정리하였습니다.
기능들의 원리에 대해서는 Linked List까지 정리한 후 추가적으로 정리하도록 하겠습니다.

그리고 큐, 스택까지 정리한 후 기초 알고리즘부터 풀이에 대한 포스팅도 진행할 예정입니다.
글의 내용이나 형식에 대해 부족한 점은 언제나 지적 부탁드리며 최대한 빠른 피드백을 하도록 하겠습니다!

블로그를 작성 시에 서식에 대한 부분을 템플릿화를 하니 확실히 작성 시간이 줄어서 좋고
글을 쓰는 방법도 조금이지만 늘고 있다는 생각이 들고 있습니다. 
개발 블로그 만들기를 정말 잘한 것 같습니다! 앞으로도 꾸준히 화이팅입니다!

TODO
- Linked List ( 연결 리스트 )

 

댓글
댓글쓰기 폼
공지사항
최근에 달린 댓글
Total
377
Today
0
Yesterday
0
링크
«   2020/08   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
글 보관함