반응형
ArrayList
ArrayList는 동적으로 크기가 늘어나는 배열이다. 그러면서도 O(1)의 접근시간(access time)을 유지한다.
배열이 가득 차는 경우, 그 크기가 두배 늘어나도록 구현되어 있다. 크기를 두배 늘리는 시간은 O(n)이지만 자주 일어나지 않기 때문에 O(1)시간이 유지된다고 보면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | public class CustomArrayList { private int size = 0; private static final int DEFAULT_SIZE = 10; private Object[] elements = new Object[DEFAULT_SIZE]; // 마지막 원소에 데이터 추가 public boolean addLast(Object element) { checkSize(); this.elements[size] = element; size++; return true; } // 해당 index에 데이터 추가 public boolean add(int index, Object element) { checkSize(); for(int i = size -1; i >= index; i--) { elements[i+1] = elements[i]; } elements[index] = element; size++; return true; } public Object remove(int index) { Object removedData = elements[index]; for(int i = index+1; i<size; i++) { elements[i-1] = elements[i]; } size--; elements[size] = null; return removedData; } // 사이즈를 체크하여, 2배씩 늘린다. private void checkSize() { if(size == elements.length) { Object[] newElements = new Object[elements.length * 2]; System.arraycopy(elements, 0, newElements, 0, elements.length); elements = newElements; } } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + Arrays.hashCode(elements); result = prime * result + size; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; CustomArrayList other = (CustomArrayList) obj; if (!Arrays.equals(elements, other.elements)) return false; if (size != other.size) return false; return true; } @Override public String toString() { return "CustomArrayList [size=" + size + ", elements=" + Arrays.toString(elements) + "]"; } } | cs |
반응형
'프로그래밍 노트 > 자료구조' 카테고리의 다른 글
ArrayList, LinkedList 성능비교 (0) | 2018.11.01 |
---|---|
[Think Data Structures] Java LinkedList 클래스 구현 및 분석 (0) | 2018.11.01 |
[Think Data Structures] Java ArrayList 클래스 구현 및 분석 (0) | 2018.10.31 |
StringBuffer (0) | 2018.09.09 |
해시테이블(HashTable) (0) | 2018.09.09 |