내일배움캠프 57일차 TIL
오늘도 오전에 기술면접 예상질문을 풀어보고 팀 프로젝트 개발을 진행했다.
배열과 List, ArrayList, Dictionary 의 차이점
배열은 특정 타입의 연속된 메모리를 정적으로 선언하여 관리할 수 있다.
List는 특정 타입의 연속된 메모리를 동적으로 관리하며, 크기가 부족할 경우 2배로 할당하고 연속되게 할당할 메모리가 없다면 새로운 메모리 공간으로 이주하여 연속된 메모리를 할당한다.
ArrayList는 불특정 타입의 List이다. 불특정 타입이라 편하지만, 넣고 뺄 때 느리다.
Dictionary는 특정 타입을 키과 밸류로 관리하는 방식이다.
Dictionary는 어떻게 구현해야 하나요?
- Dictionary는 불변값인 key와 가변값인 value로 쌍을 이뤄 데이터를 저장합니다. 또한 중복키를 허용하지 않고 그 이전값에 덮어쓰기하므로 ContainsKey를 사용해 이미 존재하는 키인지 확인해야 합니다.
Dictionary 검색이 빠른 이유는 무엇인가요?
- 해시테이블을 사용하기 때문입니다. 해시테이블의 검색 속도가 빠른 이유는 해시함수의 계산이 빠르고 배열을 사용해 데이터를 저장하므로 키의 해시값을 인덱스로 사용해 바로 해당 위치의 데이터에 접근할 수 있기 때문입니다.
- 충돌 해결 방법도 하나의 이유입니다. 해시테이블에서 여러 개의 키가 동일한 해시값을 가질경우 해시 충돌이 발생하는데 이러한 충돌을 해결하기 위해 체이닝이나 개방 주소법을 사용해 최악의 경우에도 검색 속도가 일정하게 유지됩니다.
- Dictionary는 불변값인 key와 가변값인 value로 쌍을 이뤄 데이터를 저장합니다. 또한 중복키를 허용하지 않고 그 이전값에 덮어쓰기하므로 ContainsKey를 사용해 이미 존재하는 키인지 확인해야 합니다.