728x90
반응형
리스트
- 정렬된 컬렉션
- List 인터페이스를 사용
배열과 리스트의 관계
배열
JVM은 배열이 생성될 때 반드시 배열의 크기를 알아야 한다.
final String[] stringArray = new String[3];
배열의 원소에는 인덱스 값을 이용해서 직접 접근할 수 있다.(랜덤 접근 Random Access)
배열 전체를 사용 중일 때 원소를 추가하려면 배열 크기를 늘려야 한다.
배열 복사 후 새로운 배열이 원본 배열의 주소를 가리키도록 재할당
@Test public void arrayCopy(){ int[] integers = {0, 1, 2, 3, 4}; int[] newIntegersArray = new int[integers.length + 1]; System.arraycopy(integers, 0, newIntegersArray, 0, integers.length); integers = newIntegersArray; integers[5] = 5; assertEquals(5, integers[5]); }
리스트
ArrayList
- 배열로 구성되어 있으며, 원소로 가득찬 배열에 새로운 원소를 추가할 때마다 자동으로 더 큰 배열을 재할당 한다.
- 원소를 많이 삭제해도 배열 크기는 줄어들지 않는다. (원소의 개수가 변경되는 리스트라면 최적의 선택이 아님)
- 인덱스를 사용하여 원소에 랜덤 접근할 수 있다.
- LinkedList
- 원소의 개수가 계속 변경되는 상황에서 유리함
- 배열로 구성되어 있지 않으며, 리스트 안에서 다음 원소를 가리키는 내부 객체를 이용한다.
- 인덱스를 이용해 ㅅ원소에 접근할 경우 해당 인덱스에 접근할때까지 리스트를 순회해야 함
- ArrayList클래스에서 배열 재할당 과정으로 인해 발생하는 손실을 막아준다.
- 리스트 크기가 작아지면 메모리 용량 역시 작아진다. (Stack 처럼 특수한 자료구조를 만들었다면 자료구조로 LinkedList클래스를 사용하는 것이 좋다.)
728x90
반응형
'그 외 ... (정리해야함) > 질문과 답변' 카테고리의 다른 글
final 키워드는 객체 참조에 어떤 영향을 미치는가? (0) | 2019.05.02 |
---|---|
자바에서 객체란 무엇인가? (0) | 2019.05.02 |
Queue 와 Deque는 무엇인가? (0) | 2019.05.02 |
이진 검색(binary search)은 어떻게 구현하는가? (0) | 2019.05.02 |
Comparable과 Comparator 인터페이스의 차이는 무엇인가? (0) | 2019.04.22 |