( 배열, 리스트, 큐, 스택, 딕셔너리, 해시테이블 )
점점 사용하는 변수는 늘어나고, 변수들 사이의 상관관계가 생기다보면 단순한 선언과는 다른, 자신이 원하는 수행을 편하게 해줄 저장 값이 필요해진다.
여러 변수들을 저장하는 기초적인 방법이다.
처음에 받는 변수의 갯수를 정하고 받기 때문에 이후에 값을 변경하는 것은 쉬우나 추가하는 것은 번거롭다. 같은 변수를 여러 번 받을 수 있고, 인덱스(index)라는 순서에 따라서 값을 저장한다. (적은 양의 변수 관리에 용이하다.)
자료형[배열크기] 배열이름 = { 원하는 변수1, 원하는 변수2, 원하는 변수3, ... };
int[] arr = {1,2,3,2,1};
arr.RemoveAt(idx_num); // 인덱스 값에 따른 제거가 가능하기는 하다.
값과 저장 할 메모리를 미리 정해놓는 배열과 달리 리스트는 유동적이기 때문에 배열과 달리 변수의 추가가 자유롭다.
List<자료형> 리스트이름 = new List<자료형>() { 원하는 변수1, 원하는 변수2, ...};
List<int> list = new List<int>() {1,2,3};
list.Add(4);
list.Remove(지우려는 값);
list.RemoveAt(index_num);//리스트도 동일하게 인덱스를 사용하여 값을 지울 수 있다.
배열의 인덱스 기능까지 사용가능하다면 배열을 사용하는 이유는 무엇일까?
빠른 메모리 접근 때문이다.
편지로 생각하면 전달해야하는 편지를 받을 사람이 연속적으로 있는 것(배열)과 편지를 전달해주고 다음 편지의 위치를 알 수 있는 것(리스트)의 차이이다. 그렇기 때문에 앞서 말한 것 처럼 적은 양의 변수라면 오히려 배열로 관리하는 것이 좋다.
배열, 리스트와 달리 인덱스의 개념이 없는 저장 방식이다. 그렇기에 중간 값에 접근할 수 없고, 선입선출의 개념으로 값을 가져올 수 있다.
Queue<int> que;
que.Enqueue(원하는 값);//큐의 맨 뒤에 원하는 값 추가
int a = que.Peek();//큐의 맨 앞의 값을 반환
int b = que.Dequeue();//큐의 맨 앞의 값 추출
큐와 같인 인덱스의 개념이 없고, 큐와 달리 후입선출의 개념이다.
Stack<int> stack;
stack.Push(원하는 값);//스택 맨 뒤에 원하는 값을 추가
int a = stack.Peek();//스택 맨 뒤 값을 반환
int b = stack.Pop();//스택 맨 뒤 값을 추출
저장 하려고 하는 값이 유동적이고 양도 많다면, 상황에 따라서 큐와 스택을 사용하는 것은 좋은 방법일 것이다. (리스트가 기능이 많지만 그만큼 무겁다.)
기본으로 제공 해주는 미리 만들어진 특수한 리스트(?)
key값이 인덱스의 역할을 해주는 리스트같은 느낌이다.
key값은 중복될 수 없지만 value값은 상관없다.
Dictonary<key, value> dictionary = new Dictonary<key, value>()
dictionary.Add(k1,v1);//특정 키 값에 해당하는 value 저장
dictionart.Remove(k1);//특정 키 값에 해당하는 dictionary 제거
dictionary.ContainsKey(k1);//특정 키 값이 사용 중인지 확인(bool값 반환)