Java/알고리즘 & 자료구조

[Java/자료구조] 선형구조 - 순차 리스트(Sequential List) 이해하기 : 배열, 리스트

adjh54 2023. 11. 18. 14:53
728x170
해당 글에서는 자료구조 중 선형구조에 포함되는 순차 리스트 중 배열, 리스트 대해 알아봅니다.


 

 

 💡 [참고] 자료구조의 전체 구조입니다.

- 해당 자료구조 중 선형구조 >> 선형 리스트에 대해서 알아봅니다.

 

1) 선형 구조(Linear Structure)


💡 선형 구조(Linear Structure)란?

- 데이터를 저장하기 위한 기본적인 형태로 데이터가 '일렬로 나열'되어 있을 뿐만 아니라 데이터 간에 순서가 있고 논리적으로 이어져 있는 구조를 의미합니다.
- 선형 구조에는 순차 리스트, 연결 리스트, 큐(Queue), 스택(Stack), 덱(deque)이 있습니다.

 

https://goodgid.github.io/DS-Linear-and-NonLinear/

 

 

 

 

💡 [참고] 큐, 스택, 덱에 대해 궁금하시면 아래의 글을 참고하시면 크게 도움이 됩니다.
 

[Java/자료구조] 선형구조 이해하기 -1 : 큐(Queue), 스택(Stack), 덱(Deque)

해당 글에서는 자료구조론 중 선형 구조인 큐(Queue)와 스택(Stack), 덱(Deque)에 대해서 이해하고 언제 사용하며 각각의 장단점이 무엇인지에 대해 알아보기 위한 글입니다. 1) 선형 구조(Linear Structure

adjh54.tistory.com

 

 

 

2) 순차 리스트(Sequential List)


💡 순차 리스트(Sequential List)

- 데이터 요소들이 순서대로 배치되어 있는 선형구조입니다.
- 각 요소는 다음 요소와 연결되어 있으며 각 요소는 인덱스를 통해 접근할 수 있습니다.

 

 

 

 

3) 순차 리스트 종류 : 배열(Array)


💡 배열(Array)

- 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조를 의미합니다. 

- 배열은 '동일한 타입'의 데이터 요소를 저장하는 데 사용되며 '고정된 크기'를 가지고 있어서 동일한 배열의 유형과 크기를 지정하여 생성하여 사용합니다. 배열의 값을 접근하고자 할때는 '인덱스'를 통해 참조하여 접근 할 수 있습니다.
- 해당 인덱스는 첫 번째 요소는 0부터 시작을 합니다. 데이터의 집합을 효율적으로 저장하고 관리하기 위해 사용합니다.
- 배열을 이용하여 데이터 검색, 정렬, 필터링, 통계 등에 활용될 수 있습니다.

 

 

 

1. 배열의 특징


💡 배열의 특징

1. '인덱스'를 사용하여 요소에 빠르게 접근할 수 있습니다.
- 키 값을 이용하여 접근하는 방식보다 인덱스로 접근하는 방식이 빠릅니다.

2. 메모리에 연속적으로 저장되기 때문에 '연속 접근이 가능'합니다.
- 키 값을 이용하여 접근하는 방식은 연속적으로 저장된 데이터에 대해 순차적인 접근이 불가능 하지만 배열은 연속접근이 가능합니다.

3. 요소들이 '동일한 자료형'을 가지고 있기 때문에 일관된 데이터 처리가 가능합니다.
- 일관된 데이터 타입을 가지고 있기에 처리가 편리합니다.

4. '크기가 고정'되어 있어 추가적인 메모리 할당이 필요하지 않습니다.
- 초기화 시에 ‘고정된 크기’를 지정하기에 추가 메모리 할당을 하지 않습니다.

5. 배열의 요소들은 순서가 있기 때문에 정렬된 데이터를 다루기에 유용합니다.
순차적으로 저장된 데이터이고 각각의 인덱스 기반 순서를 가지고 있기에 데이터 처리가 용이합니다.

 

 

 

2. 배열 활용: 배열의 초기화


💡 배열의 초기화

- 배열의 크기와 값에 따라 다양한 초기화를 수행할 수 있습니다.
// 1. '사이즈''값'이 둘다 없는 빈 배열
String[] strArr1 = {};

// 2. '사이즈'는 존재하지만 '값'이 없는 빈 배열
String[] strArr2 = new String[3];

// 3. '사이즈'가 자동 지정된 '값'이 있는 배열
String[] strArr3 = {"one", "two", "three"};

 

 

[ 더 알아보기 ]

💡 배열의 크기만 지정하고 값을 할당하지 않으면 무슨 값을 가질까?
데이터 유형 초기화 값
int 0
boolean false
char null
String null
float, double 0.0
객체 자료형 (예: Integer, Boolean, String) null

 

 

 

3. 배열 활용: 배열의 값 할당


💡 배열의 값 할당

- 값이 없는 빈 배열에 값을 할당하거나 인덱스를 기반으로 값을 할당할 수 있습니다
// 1. 빈 배열에 값 넣기
String[] strArr1 = new String[3];
strArr1[0] = "one";
strArr1[1] = "two";
strArr1[2] = "three";

// 2. 빈 배열 -> 사이즈 할당 -> 값 넣기
String[] strArr2 = {};
strArr2 = new String[3];

for (int i = 0; i < strArr2.length; i++) {
    strArr2[i] = Integer.toString(i);
}

 

 

 

💡 [참고] 배열의 활용 방법에 대해 궁금하시면 아래의 링크를 참고하시면 도움이 됩니다.
 

[Java] 배열(Array) 조작 함수 이해하기-1: 기본 구성, Arrays 함수

해당 글의 목적은 주요 배열 조작함수(기본 배열 구성 및 Arrays)를 이해하고 예제를 통한 이해를 돕기 위해 작성한 글입니다. 해당 글에서는 모든 함수에 대해서는 포함하고 있지 않으며 자주 사

adjh54.tistory.com

 

 

 

3. 배열 활용: 2차원 배열


💡 2차원 배열

- 행과 열로 구성된 1차원 배열을 모아서 2차원 배열을 형성합니다.
- 일반 배열과 동일하게 행과 열의 배열의 인덱스를 사용하여 요소를 접근할 수 있습니다.
// 해당 배열은 3행과 4열의 형태를 갖는 배열입니다.
int[][] matrix2Array = new int[3][4];

 

 

// 2차원 배열의 요소 접근 방법
for (int i = 0; i < matrix2Array.length; i++) {
    for (int j = 0; j < matrix2Array[i].length; j++) {
        System.out.print(array[i][j] + " ");
    }
}

 

 

 

 

 

 

 

4) 순차 리스트 종류 : 리스트(ArrayList)


💡 순차 리스트(ArrayList)

- 값과 포인터를 묶는 노드라는 것을 포인터로 연결한 자료구조입니다.

- 리스트는 '동일한 타입'의 데이터 요소를 저장하는데 사용되며 '가변적 크기'를 가지고 있어서 동일한 타입의 유형을 선택하지만 크기에 제한 없이 객체를 추가하고 삭제하는데 편리합니다.

- 컬렉션 프레임워크의 List의 인터페이스를 활용하여 구현한 구현체입니다. ArrayList 외에 LinkedList, Vector 등이 있습니다.
- 생성된 배열은 ‘인덱스’를 사용하여 개별 요소에 대해 액세스 할 수 있습니다. 해당 인덱스는 첫 번째 요소는 0부터 시작을 합니다.
- 제네릭 클래스로 제공되어, 다양한 타입의 객체를 저장할 수 있습니다. 제네릭 클래스는 클래스 내부에서 사용할 데이터 타입을 컴파일 시에 지정할 수 있는 기능을 제공합니다.

 

💡 ArrayList의 객체를 생성할 때, 데이터 타입은 ‘T’로 제너릭 타입의 매개변수로 사용이 됩니다.

- 아래와 같은 제너릭 타입은 객체 자료형으로 사용이 가능합니다.
객체 자료형 설명
Integer 정수 값을 저장하는 타입
String 문자열 값을 저장하는 타입
Double 실수 값을 저장하는 타입
Boolean 논리 값을 저장하는 타입
Object 모든 객체 타입을 저장할 수 있는 타입

 

 

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

 

[ 더 알아보기 ]

💡 ArrayList는 크기 제한이 없을까?

- ArrayList의 크기 제한은 없습니다. ArrayList는 동적으로 크기가 조정되는 배열 기반의 자료구조이므로, 필요에 따라 요소를 추가하거나 제거할 수 있습니다.
- ArrayList는 내부적으로 배열을 사용하며, 요소를 추가할 때 배열의 크기가 부족하면 자동으로 더 큰 크기의 배열로 복사됩니다. 따라서 ArrayList는 필요한 만큼 요소를 저장할 수 있습니다.
 

[Java] Collection Framework(List, Map, Set)의 인터페이스와 구현체 이해하기 - 1 : 정의 및 예시

해당 글에서는 컬렉션 프레임워크(Collection Framework)내에서 사용되는 인터페이스와 이를 구현하는 구현체 간의 관계를 이해하기 위한 목적으로 작성한 글입니다. 1) 요약 클래스분류설명Map인터페

adjh54.tistory.com

 

 

1. ArrayList 특징


💡 ArrayList 특징

1. 동적 크기를 가지고 있습니다.
- 일반 배열과 달리 ArrayList은 필요에 따라 자동으로 크기를 조절할 수 있습니다.

2. 임의 접근이 가능합니다.
ArrayList은 인덱스를 사용하여 요소에 빠르게 접근할 수 있습니다. 이를 통해 검색, 수정, 삭제 등의 작업을 효율적으로 수행할 수 있습니다.

3. 요소의 순서 유지됩니다.
- ArrayList은 요소의 삽입 순서를 유지합니다. 명시적으로 수정하지 않는 이상 순서는 일관성을 유지합니다.

4. 다양한 타입의 요소 지원합니다.
- ArrayList은 자동 박싱을 통해 기본 타입을 포함한 다양한 타입의 요소를 저장할 수 있습니다.

5. 끝에서의 삽입과 삭제가 효율적입니다.
- ArrayList의 끝에 요소를 추가하거나 제거하는 것은 효율적입니다. 요소의 이동이 최소화되기 때문입니다.

6. 중간에서의 삽입과 삭제가 비효율적입니다.
- ArrayList의 중간에 요소를 삽입하거나 삭제하는 것은 후속 요소의 이동을 필요로 하기 때문에 큰 리스트에 대해 시간이 오래 걸릴 수 있습니다.

 

 

 

2. ArrayList 활용: ArrayList의 초기화


💡 ArrayList의 초기화

- 배열을 생성하거나 초기 값을 할당하는 방법을 의미합니다.
// ArrayList 초기화 
List<String> strArrList1 = new ArrayList<>();

// ArrayList '값'을 포함하여 초기화 
List<String> strArrList2 = Arrays.asList("apple", "banana", "mongo");

 

 

 

3. ArrayList 활용: ArrayList 값 할당


💡 ArrayList 값 할당

- 빈 ArrayList에 값을 하나씩 할당하거나 일괄로 값을 할당할 수 있습니다.
// 1. 빈 ArrayList에 값 넣기
List<String> strArrList1 = new ArrayList<>();
strArrList1.add("one");
strArrList1.add("two");
strArrList1.add("three");

// 2. 빈 ArrayList에 일괄 값 넣기 
List<String> strArrList2 = new ArrayList<>();
strArrList2.addAll(Arrays.asList("one", "two", "three"));

 

💡 [참고] ArrayList의 API 문서를 정리한 내용입니다.
 

[Java/API] ArrayList Method API Document : Java 11

해당 글에서는 Java 11 버전을 기준으로 List 인터페이스를 구현한 클래스인 ArrayList의 메서드의 API에 대해서 확인합니다. 1) List / ArrayList 💡 List 란? - 순서가 있는 데이터 집합을 나타내는 ‘인터

adjh54.tistory.com

 

 

 

5) 배열과 ArrayList 비교


 💡 배열과 ArrayList를 비교 봅니다.
분류 Array ArrayList
크기 조정 고정 크기 동적 크기
메모리 할당 미리 할당 필요에 따라 동적 할당
요소 삽입/삭제 비효율적 효율적
요소 접근 효율적 효율적
데이터 유형 일반 데이터 참조 데이터

 

 

 

 

💡[참고] 좀 더 다양한 자료구조에 대해 알고 싶으시면 아래의 글을 참고하시면 도움이 됩니다.
분류 주제 링크
선형구조 순차 리스트(Array, ArrayList) https://adjh54.tistory.com/317
선형구조 연결 리스트(단순, 이중, 순환 리스트) https://adjh54.tistory.com/319
선형구조 큐, 스텍, 덱 https://adjh54.tistory.com/135
선형구조 큐, 스텍, 덱 (문제로 이해하기) https://adjh54.tistory.com/185
선형구조 큐(일반 큐, 우선순위 큐) https://adjh54.tistory.com/226
     
비선형구조 트리(일반트리/이진트리) https://adjh54.tistory.com/320
비선형구조 균형트리(AVL, 레드-블랙, B-트리) https://adjh54.tistory.com/324
비선형구조 그래프(방향, 무방향 그래프) https://adjh54.tistory.com/325

 

 

 

 

 

오늘도 감사합니다. 😀

 

 

 

 

그리드형