자료구조
Array (배열)
정의:
Array는 동일한 자료형의 요소들을 하나의 변수로 저장하는 자료구조이다. 각 요소는 고유의 인덱스를 가지며, 메모리에 연속적으로 할당된다.
탄생 이유:
고정된 크기의 데이터를 효율적으로 저장하고 관리하기 위해 만들어 졌다.
특징:
인덱스를 사용하여 요소들에 직접 접근이 가능하다.
크기가 고정되어 있어 동적 크기 조절이 어렵다.
메모리에 연속적으로 할당되어 효율적인 메모리 관리가 가능하다.
장단점:
장점:
빠른 읽기와 쓰기가 가능하다.
메모리 관리가 효율적이다.
단점:
크기를 동적으로 조절하기 어렵다.
동일한 자료형의 요소만을 가질 수 있다.
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
|
package practice;
public class ArrayPractice {
public static void main(String[] args) {
// 배열은 크기를 지정해줘야 함.
int n = 3;
// 배열 선언
String[] array = new String[n];
// 배열에 값 넣기
array[0] = "하나";
array[1] = "둘";
array[2] = "셋";
// 값 출력
System.out.println(array[0]); // 하나
// 값 수정
array[2] = "다섯";
System.out.println(array[2]); // 다섯
}
}
|
cs |
List (인터페이스)
정의:
List는 순서가 있는 컬렉션으로, 요소들을 중복 허용하고, 각 요소에는 인덱스가 부여된다. Java에서는 List 인터페이스를 제공하며, 이를 구현하는 다양한 클래스가 존재한다.
탄생 이유:
순서가 있는 데이터를 관리하고, 크기를 동적으로 조절할 수 있는 컬렉션을 제공하기 위해 만들어 졌다.
특징:
순서가 있어서 인덱스를 사용하여 접근이 가능하다.
크기를 동적으로 조절할 수 있다.
다양한 구현체가 존재하며, 기능을 다양하게 확장 가능하다.
ArrayList (구현체)
정의:
ArrayList는 List 인터페이스의 구현체로, 내부적으로 배열을 사용하여 요소를 저장한다. 크기를 동적으로 조절할 수 있고, 인덱스를 사용한 빠른 접근이 가능하다.
탄생 이유:
배열의 크기를 동적으로 조절하면서 배열의 편리한 기능을 제공하기 위해 만들어 졌다.
특징:
내부적으로 배열을 사용하여 요소를 저장한다.
인덱스를 통한 빠른 접근 가능이 가능하다.
크기를 동적으로 조절하기 쉽다.
장단점:
장점:
빠른 읽기 및 쓰기 작업이 가능하다.
동적 크기 조절이 용이하다.
단점:
중간에 요소를 삽입하거나 삭제할 때 비효율적이다.
LinkedList (구현체)
정의:
LinkedList는 List 인터페이스의 구현체로, 각 요소가 다음 요소를 가리키는 링크로 연결된 구조를 사용합니다. 삽입 및 삭제 작업이 빠르지만, 임의의 인덱스로의 접근이 느리다.
탄생 이유:
중간에 요소를 삽입 또는 삭제하는 경우에 효율적으로 처리하기 위해 만들어 졌다.
특징:
LinkedList 구조를 사용하여 요소를 저장한다.
중간에 요소를 추가하거나 삭제할 때 효율적이다.
장단점:
장점:
중간에 요소를 삽입 또는 삭제할 때 효율적이다.
동기화를 지원하여 멀티스레드 환경에서 안전하다.
단점:
임의의 인덱스로의 접근이 느리다.
노드별로 링크 정보를 저장해야 하므로 메모리 사용량이 크다.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package practice;
import java.util.*;
public class ListPractice {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
// add(): list에 파라미터로 넘어온 인자를 추가해준다.
list.add("하나"); // list: 하나
list.add("둘"); // list: 하나, 둘
list.add("셋"); // list: 하나, 둘, 셋
// 아래서 부터는 계속해서 list: 하나, 둘, 셋 이 있다고 가정하겠습니다.
// get(): list의 파라미터로 넘어온 인덱스에 해당하는 값을 반환
list.get(0); // 하나
// addAll(): list에 파라미터로 넘어온 객체의 요소들을 전부 추가해준다.
list.addAll(list); // list: 하나, 둘, 셋, 하나, 둘, 셋
// contains(): 파라미터로 넘어온 인자가 list에 존재한다면 true, 존재하지 않는다면 false를 반환한다.
list.contains("하나"); //true
// containsAll(): list의 요소들과 파라미터로 넘어온 객체의 요소들이 전부 일치한다면 true, 아니라면 false를 반환한다.
list.containsAll(list); // true
// remove(): list에서 해당 인덱스에 해당하는 값 또는 파라미터로 넘어온 값을 삭제한다.
list.remove(0); // list: 둘, 셋
list.remove("둘"); // list: 하나, 셋
// removeAll(): list에 파라미터로 넘어온 인자들의 요소들을 전부 지운다.
list.removeAll(list); // list:
// retainAll(): list에 파라미터로 넘어온 인자들의 요소들을 제외하고 전부 지운다.
list.retainAll(list); // list: 하나, 둘, 셋
// clear(): list를 전부 비운다.
list.clear(); // list:
// size(): list의 크기를 반환한다.
list.size(); // 3
// toArray(): list의 요소들을 지정한 타입의 배열로 만들어 반환한다.
Object[] arr = list.toArray();
// iterator(): list를 iterator 객체로 반환해준다.
Iterator<String> it = list.iterator();
//hasNext(): iterator에 요소가 있다면 true, 없다면 false
while(it.hasNext()) {
// next(): iterator의 현재 노드의 값을 반환해주고 다음 노드로 이동한다.
System.out.println(it.next());
}
// remove(): 현재 가르키고 있는 노드의 값을 삭제한다.
it.remove();
}
}
|
cs |
'자료구조&알고리즘' 카테고리의 다른 글
Collection 프레임워크 (1) | 2024.03.01 |
---|