[자바의정석]Java - collection framework(1) #010

박정현·2022년 1월 20일
0

Java

목록 보기
10/16
post-thumbnail

collections framework

컬렉션

  • 여러 객체(데이터)를 모아 놓은 것을 의미

프레임워크

  • 표준화 , 정형화된 체계적인 프로그래밍 방식

컬렉션 프레임워크

  • 컬렉션(다수의 객체)를 다루기 위한 표준화된 프로그래밍 방식
  • 컬렉션(다수의 데이터)을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공한다
    (저장,삭제,검색,정렬)

컬렉션 클래스

  • 다수의 데이터를 저장할 수 있는 클래스

Collection,List,Set,Map

인터페이스특징
List순서가 있는 데이터의 집합. 데이터의 중복을 허용한다
ex)대기자명단
ArrayList,LinkedList,Stack,Vector 등
Set순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.
양의 정수집합,소수의 잡합
HashSet,TreeSet 등
Map키(Key)와 값(value)의 쌍으로 이루어진 데이터의집합
순서는 유지되지 않으며, 키는 중복을 허용하지않고, 값은 중복을 허용한다
ex)우편번호,지역번호(전화번호)
HashMap,TreeMap,HashTable,Properties 등
  • List : 순서o / 중복o
  • Set : 순서x / 중복x
  • Map : 순서x/ 키중복x 값중복o
  • List,Set 인터페이스에서 공통부분을 뽑아낸것이 Collection

컬렉션 인터페이스의 메서드

  • List,Set 인터페이스에서 공통부분을 뽑아낸것이 Collection
  • 추가 ,검색 ,삭제해주는 메서드 들이있다

List인터페이스

  • List : 순서o / 중복o
  • Vector, ArrayList ,LinkedList (Vector를 개선한게 ArrayList)
  • 추가 ,검색 ,삭제 , 정렬 메서드가 있다

Set인터페이스

  • Set : 순서x / 중복x
  • HashSet,TreeSet,SortedSet
  • Collection 인터페이스와 메서드가 동일하다
  • 집합과 관련된 메서드가 있다 boolean 을 반환한다 (합집합,부분집합,차집합,교집합)

Map인터페이스

  • Map : 순서x/ 키중복x 값중복o
  • HashMap,TreeMap , Hashtable,SortedMap,LinkedHashMap(순서o)
  • 추가,삭제,검색,읽기()
  • 키와 값 한쌍을 Entry라고 부른다

ArrayList

ArrayList

  • ArrayList 는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일
    ArrayList와 달리 Vector는 자체적으로 동기화처리가 되어 있다
  • List인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.
  • 데이터의 저장공간으로 배열을 사용한다.(배열기반)

ArrayList 메서드

  • ArrayList를 만들때는 배열의 길이를 적절히 지정해주는것이 중요하다
  • 추가 : int index로 어디에 추가할지 정해줄수있다
    boolean add(Object o) , void add(int index,Object element) ,
    boolean addAll(Collection c) : 컬렉션 요소를 전부저장, boolean addAll(int index,Collection c)
  • 삭제 :
    boolean remove(Object o),Object remove(int index),
    boolean removeAll(Coolection c) ,void clear()
  • 검색 :
    int indexOf(Object o), int lastIndexOf(Object o) : 찾으면1 못찾으면 -1
    boolean contains(Object o) : 객체가 존재하는지 확인
    Object get(int index) : 객체읽기,
    Object set(int index, Object element) : 객체 변경
    List subList(int fromIndex,int toIndex) :from~to까지 뽑아서 새로운 객체 생성
    Object[] toArray() : ArrayList의 객체배열을 반환
    boolean isEmpty() : 비어있는지 확인
    void trimToSize() : 빈공간 제거
    int size()

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

  • 삭제할 경우 데이터가 빈공간을 위로 올라가서 채워줌
  1. 삭제할 데이터 아래의 데이터를 한칸씩 위로 복사해서 삭제할 데이터를 덮어쓴다
  2. 데이터가 모두 한칸씩 이동했으므로 마지막 데이터는 null로 변경
  3. 데이터가 삭제되어 데이터의 개수가 줄었으므로 size의 값을 감소시킨다 size--
  4. 마지막 데이터를 삭제할 경우 1의 과정은 필요없다

LinkedList

배열(Array)의 장단점

  • 장점 : 배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간이 짧다
  • 단점1 : 크기를 변경 할 수 없다
    크기를 변경할 경우 새로운 배열생성,데이터복사,참조변경의 과정을 거쳐야된다
  • 단점2 : 비순차적인 데이터의 추가,삭제에 시간이 많이 걸린다
    삭제하기 위해 다른 데이터를 옮겨야함, 그러나 데이터 끝에 추가, 끝부터 삭제는 빠름

LinkedList

  • 배열의 단점을 보완함
  • EX) 연결된 기차
  • 배열과 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결
  • 데이터 하나하나가 연결되어있다
  • 데이터 하나하나를 노드(Node)라고 부른다
  • 데이터의 삭제 : 단 한 번의 참조 변경만으로 가능하다
  • 데이터 추가 : 한번의 Node객체생성과 두번의 참조변경으로 가능하다
  • 단점 : 불연속적이기 때문에 데이터 접근성이 나쁘다
    각 노드들은 각자의 다음 노드만 위치를 알고있기 때문에 두개 건너뛴 요소는 모름
    그래서 한번에 이동이 불가능

double linked list - 이중연결리스트

  • 링크트 리스트의 접근성을 향상
  • 앞뒤(next,previous)로 접근이 가능하다
  • 한번에 두개 세개 건너뛰는건 불가능

doubly circular linked list - 이중 원형 연결리스트

  • 마지막 요소의 값을 맨앞 요소, 맨앞요소를 마지막 요소랑 연결해줌
  • 첫 요소와 마지막 요소를 연결해서 사용함

ArrayList 와 LinkedList -성능비교

  • 순차적으로 추가,삭제는 ArrayList가 빠르다 큰차이는 없다
  • 중간에 추가,삭제하기 LinkedList가 훨씬 빠르다
  • 데이터 접근은 ArrayList가 훨씬 빠르다
profile
빠샤

0개의 댓글

관련 채용 정보