JAVA/자바의 정석

[자바의 정석 - 기초편] 11. (2) ArrayList / java API 소스 보기 / LinkedList

서영22 2023. 12. 7. 17:24

 ArrayList 

- 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일

   (Vector - 동기화 O / ArrayList - 동기화 X)

 

- List 인터페이스를 구현하므로 저장순서가 유지되고 중복 허용 O

 

- 데이터의 저장공간으로 배열 사용

 

 

 

 ArrayList의 메서드 

 

 

 

< 예제 >

 

 

저장할 때 : list.add(3) ➔ list.add(new Integer(3)) 으로 됨

지울 때 : list.remove(3) ➔ 숫자 3이아니라 인덱스 3이 지워짐

 

 

 

 ArrayList에 저장된 객체의 삭제 과정 

1. 삭제할 데이터 아래의 데이터를 한칸씩 위로 복사해서 삭제할 데이터를 덮어씀

2. 데이터가 모두 한칸씩 이동했으므로 마지막 데이터는 null로 변경함

3. 데이터가 삭제되어 데이터의 개수가 줄었으므로 size값 감소시킴

( * 마지막 데이터 삭제시, 1번 (배열의 복사) 과정은 필요 X )

 

 

 

 

 Java API 소스 보기 

1. 폴더에서

 

/JDK설치경로/src.zip 압축해제

java.util.Vector

 

 

2. 이클립스에서

 

 

 

 

 배열의 장단점 

배열의 장점 : 구조가 간단, 데이터를 읽는데 걸리는 시간(접근 시간 access time)이 짧음

 

배열의 단점 : 1. 크기 변경 X (새로운 배열을 생성 후 복사하고 참조 변경해야 함)

 

                     2. 비순차적인 데이터의 추가, 삭제에 시간이 많이 듦 (데이터를 옮겨야 해서)

                          but, 순차적인 데이터 추가(끝에 추가), 삭제(끝부터 삭제)는 빠름

 

 

 

 LinkedList 

배열의 단점을 보완

 

배열과 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결 (link)

 

 

 

- 데이터 삭제 : 단 한번의 참조변경만으로 가능

 

 

 

- 데이터 삽입 : 한번의 Node 객체 생성과 두번의 참조변경만으로 가능

 

 

 

 

 Doubly LinkedList  - 이중 연결 리스트 

링크드 리스트 : 연결리스트. 데이터 접근성 나쁨

 

더블리 링크드 리스트 : 이중 연결리스트. 링크드 리스트보다 접근성 향상

 

 

 

 ArrayList  vs  LinkedList 비교 

- 순차적으로 데이터 추가 / 삭제      : ArrayList  vs  LinkedList

 

- 비순차적으로 데이터 추가 / 삭제  : ArrayList  vs  LinkedList

 

- 중간에 데이터 추가 / 삭제             : ArrayList  vs  LinkedList

 

- 접근 시간 access time                   : ArrayList  vs  LinkedList

  ( 인덱스가 n인 데이터 주소 = 배열의 주소 + n*데이터 타입의 크기 )

 

 

컬렉션 읽기 (접근시간) 추가 / 삭제 비고
ArrayList 빠름 느림 순차적 추가 / 삭제는 빠름
비효율적인 메모리 사용 (배열커서)
LinkedList 느림 빠름 데이터가 많을수록 접근성 떨어짐