Vector 와 ArrayList
  • ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일
  • List인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.
  • 데이터의 저장공간으로 배열을 사용한다.(배열기반)
  • Vector는 자체적으로 동기화처리가 되어있으나 ArrayList는 그렇지 않다.
ArrayList의 단점 - 배열의 단점
  • 배열은 구조가 간단하고 데이터를 읽어 오는데 걸리는시간(접근시간, Accesstime)이 가장 빠르다는 장점이 있지만 단점도 있다.

  • 단점 1 : 크기를 변경할 수 없다.
    • 크기를 변경해야 하는 경우 새로운 배열을 생성하고 데이터를 복사해야 한다.(비용이 큰 작업)
    • 크기 변경을 피하기 위해 충분히 큰 배열을 생성하면 메모리 낭비가 심해진다.
  • 단점 2 : 비순차적인 데이터의 추가, 삭제에 시간이 많이 걸린다.
    • 데이터를 추가하거나 삭제하기 위해, 많은 데이터를 옮겨야한다.
    • 그러나 순차적인 데이터추가(마짐가에 추가)와 순차적인 데이터를 삭제하는 것(마지막부터 삭제)은 빠르다.
Deep copy vs. Shallow copy
  • Deep copy(깊은 복사) : 같은 내용의 새로운 객체를 생성. 원본의 변화에 복사본이 영향을 받지 않는다.
  • Shallow copy(얕은 복사) : 참조변수만 복사. 원본의 변화에 복사본이 영향을 받는다. copy_type
LinkedList - 배열의 단점을 보완
  • 배열과 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결(link)

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

linkedList_delete

  • 데이터의 추가 : 하나의 Node 객체 생성과 한 번의 참조변경만으로 가능

linkedList_add

LinkedList - 이중 원형 링크드 리스트
  • 링크드 리스트 - 연결리스트, 데이터 접근성이 나쁨
class Node {
	Node next; // 다음 노드 주소 저장
	Object obj;
}
  • 더블리 링크드 리스트 - 이중 연결리스트 접근성 향상
class Node {
	Node next; // 다음 노드 주소 저장
	Node previouse; // 이전 노드 주소 저장
	Object obj;
}
  • 더블리 써큘러 링크드 리스트 - 이중 원형 연결리스트
    • 이중 연결리스트에 끝과 시작이 연결 되어 있음
주요메서드

https://docs.oracle.com/javase/8/docs/api/ -> java.util 에서 참조

ArrayList vs. LinkedList
  • 순차적으로 데이터를 추가/삭제 하는경우, ArrayList가 빠르다.
  • 비순차적으로 데이터를 추가/삭제 하는 경우, LinkedList가 빠르다.
  • 접근시간은 ArrayList가 빠르다.
chanhee.kim's profile image

chanhee.kim

2018-01-09 10:11

Read more posts by this author