다수의 객체를 저장해야 하는 경우가 생기는데 그때 컬렉션 프레임워크를 사용한다. 객체를 저장해 두었다가 필요할때 마다 하나씩 꺼내서 이용한다
배열은 쉽게 생성하고 사용 할 수 있지만, 저장할 수 있는 객체 수가 배열을 생성할 때 결정되기 때문에 불특정한 다수의 객체를 저장하기에는 문제가 생긴다!!
또 새로운 객체를 저장하려면 어디가 비어 있는지 확인하는 코드도 필요하다..
자바는 이러한 문제를 해결하기 위해서 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들을 포함시켜 놓았다!! 이를 바로 컬렉션 프레임워크(Collection Framework)라고 한다!!!!!
컬렉션 프레임워크의 주요 인터페이스
List -> 순서유지와 중복저장 O
Set -> 순서유지와 중복저장 X
Map -> 키-값 의 쌍으로 저장 , 키 중복저장 X
-------------------------------------------------------------------------------------------
List - 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공한다.
List컬렉션은 객체 자체를 저장하는게 아니라 객체의 번지를 참조한다.
동일한 객체를 중복 저장할 수 있는데, 이 경우 동일한 번지가 참조 되는 것이다!!
ArrayList의 특징
ArrayList는 요소를 추가하면 차례대로 0번 인덱스 위치부터 요소가 추가 되는 형태이다. 따라서 순차적인 접근이나 뒤에서부터 데이터를 추가하거나 삭제할때 효과적이다!! 그러나 데이터가 중간에 삽입되거나 삭제되는 경우에는 인덱스를 계속해서 옮겨다니기에 효과적이지 못하다.
ArrayList에 요소를 추가하고 삭제하는 예이다!
ArrayList<String> ar = new ArrayList<String>(); ar.add("korea"); ar.add("usa"); ar.add("japan"); ar.add("china"); System.out.println("ArrayList에 요소 추가하고 출력"); for(int i=0; i<ar.size(); i++) { System.out.println(ar.get(i)); }System.out.println(); ar.remove(0); ar.remove("usa"); for(int i=0; i<ar.size(); i++) { System.out.println(ar.get(i)); }
LinkedList의 특징
LinkedList는 List 구현 클래스이므로 ArrayList와 사용 방법은 똑같지만 내부 구조는 완전 다르다. ArrayList는 내부 배열에 객체를 저장해서 인덱스로 관리하지만, LinkedList는 인접 참조를 링크해서 체인처럼 관리한다!!
그렇기에 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보다 LinkedList가 좋은 효과를 발휘한다!!
'Java' 카테고리의 다른 글
달력 검색 (0) | 2019.12.14 |
---|---|
Stream (0) | 2019.12.14 |
Wrapper Class - AutoBoxing (0) | 2019.12.13 |
Anonymous class (0) | 2019.12.13 |
추상 클래스 vs 인터페이스 (0) | 2019.12.13 |