배열이 한번 완성이 되면 크기를 키우거나 줄일 수 없다.
그런 점들을 보완하게 위해 다양한 컬렉션이 존재한다.
컬렉션을 쓰기 위해서 먼저 네임스페이스를 넣어줘야 한다.
using System.Collections;
ArrayList
ArrayList는 컬렉션에 누군가 만들어놓은 클래스다.
배열과 여러 가지 비슷하다.
// 선언
ArrayList arrayList = new ArrayList();
// 원소 추가 .add()를 통해 원소를 추가할 수 있다.
arrayList.Add(1);
// 크기 측정 .Count를 이용하면 크기를 측정할 수 있다.
arrayList.Count;
// 원소 삭제
arrayList.Remove("특정값"); // 특정 원소값을 지우고 싶을 때는 .Remove()
arrayList.RemoveAt(1); // 인덱스번호로 지우고 싶을 땐 .RemoveAt()
arrayList.RemoveRange(1,2); // 범위로 지우고 싶을 때. 첫번째 숫자 인덱스부터 몇개를 지우겠다는 의미.
// 모든 원소 삭제
arrayList.Clear();
// 특정값 있는지 찾는 메소드
arrayList.Contains("가");
중간에 끼워넣는 insert, 특정 범위를 뽑아내는 range 등 다양한 메소드가 있다.
리스트 List
//리스트 선언 소괄호 안에 자료형을 써줘야 한다.
List<int> list = new List<int>();
그 밖에 arraylist와 메소드는 같은데 다만 list는 특정 자료형만 담을 수 있다는 게 차이점이다.
특정 자료형만 넣기로 정해져있어서 arraylist에 비해 연산이 효율적이다.
해시테이블 Hashtable
해시테이블은 인덱스로 값을 접근하지 않는다.
키가 정해져있고 키를 참조하면 값이 나오게 된다.
// 선언
Hashtable hashTable = new Hashtable();
// 원소 추가할 때 키와 값을 넣어줘야 한다.
hashTable.Add("키", 1);
hashTable.Add(5, "값");
// 참조 때 인덱스 대신 키를 넣으면 값이 리턴된다.
hashTable["키"];
remove 메소드 등을 실행할 때도 인덱스가 아닌 키로 해야 된다.
딕셔너리 dictionary
해시테이블처럼 딕셔너리도 키와 값을 이용하는 컬렉션이다.
그런데 list처럼 키와 값의 자료형을 미리 정해놔야 한다.
그밖에는 해시테이블과 같으므로 마치 ArrayList와 List 관계와 같다.
// 선언 키와 값의 자료형을 함께 선언해줘야 한다.
Dictionary<string, int> dictionary = new Dictionary<string, int>();
연산에 있어서 해시테이블보다 유리하기 때문에 상황에 따라 딕셔너리를 쓰는 게 좋다.
큐 queue
기존 배열과는 큐와 스택은 값이 빠져나간다.
큐는 선입선출이라 먼저 입력한 값이 먼저 빠져나가고 스택은 나중에 입력한 값이 먼저 빠져나간다.
이 둘은 선언한 뒤 값을 넣었다가 빼는 것만 할 수 있다.
// 큐 선언, 자료형을 명시해도 되고 안해도 된다.
Queue queue = new Queue();
// 큐 원소 추가
queue.Enqueue(1);
queue.Enqueue(2);
// 큐 원소 꺼내기 FIFO
queue.Dequeue(); // 이렇게 하면 먼저 입력한 1이 빠져나온다.
queue나 stack을 쓸 때 원소가 없을 때 출력하지 않도록 .Count 메소드를 이용해 조건문을 만들어 쓰는 게 좋다.
대기열 같은 걸 만들 때 큐를 쓴다.
먼저 들어온 사람이 먼저 나가도록.
스택 Stack
// 스택 선언, 큐와 마찬가지로 자료형을 정할 수도 있고 아닐 수도 있다.
Stack stack = new Stack();
// 원소 추가할 때는 Push 메소드를 사용한다.
stack.Push(1);
stack.Push(2);
// 원소 빼기 Pop 메소드를 사용한다. LIFO
stack.Pop(); // Pop을 쓰면 나중에 넣은 2부터 나온다.
※ 함께 읽으면 좋은 C# 기초
'IT > 코딩' 카테고리의 다른 글
C# 구조체 델리게이트 (0) | 2021.12.14 |
---|---|
C# 네임스페이스 Namespace (0) | 2021.12.13 |
C# 배열 선언과 사용법 (0) | 2021.12.11 |
C# 조건문, 반복문 (0) | 2021.12.10 |
C# 연산자, ++ 사용법 (0) | 2021.12.09 |