본문 바로가기

Development Note

Data Structure - Array-based List ①

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
인터페이스를 만드는거 까지는 좋은데... -_-;; 어디다 자료를 담는다는 말입니까...;;; 그래서 생각해 보니까.. 아!! 그게 있었군요 :) 바로.. 배열입니다. (Array) 배열은 한 객체 안에 여러개의 객체들을 담을 수 있었잖아요? 그럼 그렇게 배열을 이용하여 코딩을 하면 되겠군요... 'ㅡ' ㅋㅋㅋ 생각보다 단순하네요... 헉..

그런데 생각해보니까.. 배열이라는 녀석은 하나 생각할게 있었습니다. 이 배열의 크기인데요.. 배열의 크기가.. -_-;; 일정하기 때문에 입력될 자료에 따라서 크기를 잘 지정을 해줘야 겠군요.. 고로 확장성에 제약이 좀 있었습니다.

여튼간에.. 이 배열을 사용해서 만들어 보도록 하겠습니다 :)

열심히 뻘짓한 결과입니다 -_- 가여히 봐주세효.. 무려 3시간이 걸렸습니다.

가장 애를 먹이던 부분이 새로운 요소를 특정 위치에 추가시키는 메소드인 add(int position, T newEntry) 였습니다.


       public void add(int position, T newEntry) {

                    T[] moveeList = null; // 복사될 영역을 위한 객체 생성

                    if (position < length)

                               moveeList = extractArray(list, position, length);

                    // extractArray 메소드를 사용하여 추출한 부분으로 moveeList 초기화

                    if (!isEmpty()) {

                               list[position] = newEntry; // 원하는 인덱스에 추가될 새로운 요소를 위치 시킨다.

                               for (int i = 0; i < moveeList.length; i++)

                                         list[position + 1 + i] = moveeList[i];

                               // 요소가 추가 된 인덱스 다음부터 추출한 리스트로 채운다.

                               length++;

                    }

          }


여깁니다.. 여기서는 extractArray 라는 메소드를 하나 만들었는데요.. 이게 뭐하는 거냐면.. 특정 배열을 받아서 시작 인덱스와 끝 인덱스 값을 받아서 그만큼 추출해서 새로운 배열을 반환해 주는 메소드입니다. 그러니까 특정 요소가 추가되는 경우에 나머지 요소들이 뒤로 밀리게 하기 위해서 후반부에 있는 요소들을 싸잡아서 옮겨버릴라고 만든거죠 -_-;;

       private T[] extractArray(T[] targetArray, int startPosition, int endPosition) {

                    T[] moveeList = (T[]) new Object[endPosition - startPosition + 1];

                    for (int i = 0; i < moveeList.length; i++)

                               moveeList[i] = targetArray[i + startPosition];

                    return moveeList;

          }


이게 바로 그 extractArray 메소드 입니다. 굉장히 복잡합니다.. 어느 정신으로 만들었느지도 모르겠습니다 ㅠㅠ 여튼.. 처음 위치 인덱스와 마지막 인덱스 위치를 포함해 그 사이에 모든 요소들을 가지고 오구요.. 'ㅡ' 음음 하튼 이걸 써서 두번재 add 메소드를 만들기도 하구요.. remove에서도 사용합니다!!

          public void remove(int givenPosition) {

                    T[] moveeList;

                    moveeList = extractArray(list, givenPosition + 1, length);

                    for (int i = 0; i < moveeList.length; i++)

                               list[givenPosition + i] = moveeList[i];

                    length--;

          }

그쵸 'ㅡ'? remove에서도 마찬가지로 하나를 지우고 나머지 뒤에 있는 요소들을 옮겨와야 하잖아요? 그래서 Array를 복사해서 아예 덮어 씌워버리게 된겁니다 +_+ ㅋ

그럼 제가 만든게 얼마나 잘 돌아가는지 테스트를 해봐야겠지요?

사용자 삽입 이미지
느므느므 잘돌아 갑니다.. 행복합니다 ㅠㅠ (사실 이 과정에서 삽질이 많았습니다만.. 해결 했습니다 ^ㅡ') ㅋㅋ