Computer Science/Data Structure

[Data Structure/자료구조][CS] 1. Array와 List

devYeON_ 2021. 12. 21. 21:39

1. Array

  1. 정의 : 연속된 메모리 공간에 순차적으로 저장된 데이터의 모임
    배열
    💡 value는 배열의 element. 즉, 요소를 뜻하고 [number]은 배열의 index를 의미

2. 특징

  • 선형 자료구조
  • 각 요소는 인덱스를 통해 액세스 할 수 있음
  • Multi-Dementional Array : 배열 안에 배열 생성 가능 = 다차원 배열

3. 장단점

장점 - 크기 변경이 어렵다
- 삭제 삽입 시, 비용이 많이 든다
- overflow가 생길 가능성이 있다
- 저장 공간이 낭비될 수 있다
단점 - 크기 변경이 어렵다
- 삭제 삽입 시, 비용이 많이 든다
- overflow가 생길 가능성이 있다
- 저장 공간이 낭비될 수 있다

4. 배열을 사용하는 경우

  • 값보다 순서가 더 중요할 때
  • 다차원 데이터를 사용할 때
  • 정적인 경우. 즉, 메모리 크기가 지정된 상태에서 삭제와 삽입이 빈번하지 않을 때

5. 시간 복잡도

기능 속도
read O(1)
insert O(n)
delete O(n)
search O(n)

2. List

1. 정의

  • 순서가 있는 데이터의 모임

2. 종류 : 단방향, 양방향, 원형

3. 특징

  • 선형 자료구조
  • 동적 크기를 가지는 배열

4. 장단점

장점 - 동적으로 크기를 배열할 수 있다
- 삽입과 삭제가 용이하다
- 빈틈없는 데이터의 적재가 가능
- 메모리의 재사용이 편리
단점 - 순차탐색에 불리하다(index가 중요하지 않기 때문)
- 빈 element 허용 X - 검색 성능이 좋지 않음

5. 구현 방식

  • Array List
ArrayList<Object> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add("hello");
list.add(1,100);   // list의 1 index에 100 추가
list.remove(2); //list의 2번째 데이터 삭제
list.get(3); //list의 3번째 데이터 가져오기

Iterator it = list.iterator();
while(it.hasNext()){
	System.out.println(it.next());
}

  • LinkedList
public void addFirst(Ojbect data){
	Node newNode = new Node(data);
	newNode.next = head;
	head = newNode;
	size++;
	if(head.next == null){
		tail = head;
	}
}

public void addLast(Ojbect data){
	Node newNode = new Node(data);
	if(size == 0){
		addFirst(data);
	}else{
		tail.next = newNode;
		tail = newNode;
		size++;
	}
}

public void addMidle(int node, Object data){
	Node cur = head;
	if(node == 0){
		addFirst(data);
	}else{
		Node newNode = new Node(data);
		while(node-- > 0){
			cur = cur.next;
		}
		newNode.next = cur.next;
		cur.next = newNode;
		size++;
	}
}

3. ArrayList vs Linked List

  ArrayList LinkedList
공간적 제약 결국 본질은 배열이기 때문에 길이가 고정적임 Node는 연결된 노드의 정보만 가지기 때문에 공간적 제약이 많지 않음
삽입 여유공간이 있으면 O(1)
여유공간이 없으면 O(n)
마지막에 노드를 추가하는 것은 O(1)
접근 임의접근 순차접근

4. Array VS ArrayList

  Array ArrayList
길이 고정 length 가변 size
자료형 int/float/double... Object
차원 다차원 단일차원

💡 Object : Integer, String, Character...

📌 공통점

  • Null 가능
  • 순차적
  • Duplication Data 가능

5. Array VS List

  Array List
추가/삭제 느림 빠름
조회 빠름 느림
데이터의크기 정적 동적
검색시 유리 불리