Array, List

개발자가 되고 싶어요 ㅣ 2024. 2. 3. 15:38

 

자료구조


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

 


 

'자료구조&알고리즘' 카테고리의 다른 글

tmp  (0) 2024.05.19
tmp  (0) 2024.04.20
Collection 프레임워크  (1) 2024.03.01