Java에서 배열은 어떻게 쓸까요? C언어에서의 배열과 똑같습니다. 다만, 자바에서는 배열이 실제로 객체이기 때문에, Heap 영역에 생성이 된다는 것 정도의 차이밖에 없어요. 그리고 크기가 고정되어요. 즉, 고정 힙 배열, fixed heap array 정도로 생각하면 좋겠습니다. 예제 프로그램 1을 봅시다. 일단, 우리는, 크기가 2인 int형 배열 arr을 선언하려고 합니다. 그러면, int arr[] = new int[2]; 이렇게 선언할 수 있어요. int형을 저장할 수 있는 2개의 공간을 할당한다는 건데요. 일단 6번째 줄까지 수행이 되면, 메모리에 다음과 같이 저장이 됩니다. arr이 int형을 2개 저장할 수 있는 공간을 가리키고 있어요. arr은 스택에, 실제로 real int를 2개 저..
배열 검색 결과
리스트와 배열의 차이점은 면접에서 자주 나오는 질문 중에 하나입니다. 저에게 메일로 질문이 들어온 것 중 하나는, 순회 속도가 어떻게 차이가 나느냐였습니다. n이 작을 때는 별 차이가 없을 수도 있습니다. 하지만 n이 3000 ~ 4000만 정도만 되도 이야기가 달라집니다. 배열은 순차적으로 저장이 되지만, 리스트는 그렇지 않습니다. cache를 이용하기 좋은 구조는 리스트보다 배열이라는 겁니다. 정말 그런지 실험을 해 봅시다. 배열과 링크드 리스트의 순회 성능 테스트를 위한 코드를 작성해 봅시다. node형을 하나 선언해 주었는데요. data 필드와, 다음 주소를 가리킬 필드를 선언해 주었습니다. 단일 링크드 리스트는 포인터가 1개, 더블은 2개일 거에요. C++의 리스트는 더블로 구현이 되어 있습니다..
보통 Dynamic array, 동적 배열이라고 하면 크기가 변하는 배열을 의미합니다. c++의 STL에서는 vector가, 그리고 Java에서는 ArrayList가 있어요. 그런데, push_back이나 add를 100만번, 200만번을 해도, 실제로는 그렇게 오래 걸리지 않는 듯 싶습니다. 이는 왜 그럴까요? ArrayList와 vector는 다음 두 함수가 있습니다. size와 capacity. 이 둘의 차이를 이해하기 전에, 배열에 원소를 추가할 때 어떤 식으로 처리해야 좋은지 생각해 보도록 합시다. 추가할 공간이 많이 남아 있습니다. 예를 들자면, 이 경우, 추가할 공간이 2개나 더 있습니다. 4 뒤에 추가해도 되는 상황입니다. 그러면, push_back이나 add가 호출이 되었을 때, 4 뒤에..
최근댓글