반응형
컬렉션 프레임워크는 아주 중요한 개념이고 양이 많기 때문에 두 번에 걸처 포스팅을 하겠다.
1.컬렉션 프레임워크
:객체를 수집해 저장한다.
:다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다.
1)Framework
: 제어권한이 사용자에게 없다.
: 지정된 장소에 지정된 방법으로 내용을 채워야 한다.
2)Library
: 프로그램에서 가져다 쓸 수 있는 API.
: 프레임워크에서 많이 가져다 쓴다.
3)Runtime
: 프로그램이 실행할 수 있는 환경을 말한다. (실행환경)
4)Platform = Framework+Runtime
**Framework와 Library
프레임워크와 라이브러리의 차이점은 제어 흐름에 대한 주도성이 누구/어디에 있는가 이다.
즉, 프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣지만,
라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 개념이다.
배열은 한 번 정한 크기와 타입을 바꿀 수 없다. (라이브러리로서 큰 단점이다.)
또한, 객체를 삭제했을 때 해당 인덱스가 비게 되고 나중에 어디 인덱스가 비어있는지 확인해야한다.
따라서, 배열의 단점을 보완한 컬레션 프레임워크를 이용해 객체들을 효율적으로 추가,삭제, 검색할 수 있다. (CRED)
<JCF(Java Collection Framework)의 전제적인 hierarchy>
자주 사용되는 컬렉션을 나타낸 그림으로 java.util 패키지에 포함되어 있다.
list 컬렉션 - 순서를 보장해준다. 중간에 값이 변경되면 순서가 밀리거나 땡겨진다.
set 컬렉션 - 중복이 허용되지 않는다. 순서를 보장하지 않는다.
map컬렉션 - 이름과 값을 묶어서(key와 value 쌍으로) 저장하여 이름을 통해 찾는다. 따라서 순서가 필요가 없다.
2.List 컬렉션
: 인덱스로 관리 한다.
: 중복해서 객체 저장이 가능하다.
-주요 메소드
기능 | 메소드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 맨끝에 추가(인덱스 번호가 없으면 자동) |
void add(int index, E element) | 주어진 인덱스에 객체를 추가 | |
set(int index, E element) | 주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈 | |
객체 검색 | boolean contain(Object o) | 주어진 객체가 저장되어 있는지 여부 |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴 | |
isEmpty() | 컬렉션이 비어 있는지 조사 | |
int size() | 저장되어있는 전체 객체수를 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체를 삭제 |
E remove(int index) | 주어진 인덱스에 저장된 객체를 삭제 | |
boolean remove(Object o) | 주어진 객체를 삭제 |
1)ArrayList
예제를 통해 추가하기 제거하기 값 불러오기 등 자세히 알 수 있다.
ex)
-여기서 궁금해진
List<T> list = new ArrayList<>(); 와 ArrayList<T> list = new ArrayList<>(); 의 차이
1. 인터페이스 List 대신에 구현 클래스 ArrayList의 형타입을 알 수 있다면 더 편리하게 사용할 수 있습니다. (낮게 나는 새가 더 자세히 본다)
2. 구현 클래스 ArrayList 대신에 인터페이스 List를 사용하면 더 많은 형타입을 받아 들일 수 있습니다.
(높게 나는 새가 더 멀리 본다.) (출처: http://yongdev.tistory.com/13 )
2)LinkedList
: 인접참조를 링크해서 체인처럼 관리한다.
: 따라서 특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞뒤 링크만 변경하면 되기 때문에
빈번한 객체의 삭제와 삽입에 적합하다.
ex)
엄청 큰 시간 차이를 볼 수 있다.
List는 배열과 다르게 전체 배열을 출력하고 싶을때
배열의 이름만 입력해도 된다.
배열은 Arrays.toString(배열이름);
3)Vector
: 멀티 스레드에서 스레드가 동시에 접근할때
동기화를 통해 안전하게 접근하는 것이 있는데, vector 또한 스레드에 안전한 배열 방식이다.
: vector는 무조건 동기화한다.
: 이해가 안간다면 멀티 스레드를 공부하고 다시 보면 된다.
ex)Board - VectorExample(main)
반응형
'JAVA' 카테고리의 다른 글
[JAVA 개념7] 컬렉션 프레임워크3 (Map) (0) | 2018.11.13 |
---|---|
[JAVA 개념6] 컬렉션 프레임워크2 (Set) (0) | 2018.11.13 |
[JAVA 개념4] 예외처리 (0) | 2018.11.12 |
[JAVA 개념3]인터페이스 (0) | 2018.11.11 |
[JAVA 개념2]상속이란 무엇인가 (0) | 2018.11.10 |
댓글