순서
1. 컬렉션 프레임워크 사용 이유
2. 컬렉션 프레임워크 종류
3. 컬렉션 프레임워크 종류에 대한 설명
4. 컬렉션 프레임워크의 장단점
5. ArrayList 와 LinkedList 의 다른 동작방식
6. List 와 Map 의 사용방식에 따른 쓰임새
1. 왜 컬렉션 프레임워크(Set, List, Map)을 사용해야 할까요?
전통적으로 프로그래밍에서 많은 양의 자료(데이터)처리를 위해서는 배열을 이용한다.
그러나 이 배열은 불편한 점이 2가지가 있다.
1. 배열에 담는 자료형은 동일해야 한다. 밑에 문장처럼 배열에 한가지 자료형밖에 담을 수 있다.
한가지뿐 아니라 다른 자료형도 함께 넣고 싶지만 그냥 배열에서는 힘든 부분이다.
int []arr = new int[100];
2. 배열은 데이터의 크기를 알 수 없는 경우에는 부적합하다.
데이터의 크기가 미리 안정해진 경우, 파악하기 어려운 경우는 배열에서 힘들다.
기준을 많이 잡아놓고 다 사용하지 않는다면 메모리를 차지하고만 있고,
기준을 낮게 잡아놓으면 기준치초과시 다시 만들어야하는 불편함이 있다.
String []name = new String[1000];
==> 이런 배열의 단점을 보완하기 위해 컬렉션 프레임워크(==동적배열)를 만들었다.
동적배열이란?
: 사용자의 사용여부에 따라 늘어나기도 줄어들기도 하는 배열을 의미
위에 그냥 배열은 정적배열이라고 한다.
2. 컬렉션 프레임워크 종류
Set
List
Map
3. 컬렉션 프레임워크(==동적배열)
1) Set ==> 중복불가능
HashSet == 데이터 입력의 순서를 유지하지 않는다. (사용빈도수 높음)
LinkedHashSet == 데이터 입력의 순서를 유지한다.
TreeSet == 데이터를 사전식으로 정렬해준다. (ex. 로또번호)
2) List ==> 중복가능
ArrayList 와 LinkedList는 사용자가 볼때 같지만 내부적으로 동작방식이 다르다.
ArrayList == (사용빈도수 높음(컬렉션 프레임워크 중에서도))
LinkedList ==
Stack ==
Vector == (자바초기에 많이 사용했었음)
3) Map ==> key 와 value 를 이용해 데이터에 접근 방식
key는 중복 불가, value는 중복 가능
key 가 중복이 된다면 원래 값을 반환하고 새로운 값을 넣는다.
index가 아닌 key로 접근하다보니 보다 더 직관적이다.
HashMap == 데이터 입력의 순서를 유지하지 않는다.
LinkedHashMap == 데이터 입력의 순서를 유지한다.
TreeMap == 데이터를 사전식으로 정렬해준다.
API ===> Java.util 안에서 참고
Set의 데이터를 하나씩 읽어오기 및 기능
Iterator
4. 컬렉션 프레임워크의 장단점
장점
1) 온갖 자료형을 넣을 수 있다. String , int , double, date 등등
단점
2) 데이터를 꺼내와서 써먹기 위해서는 다시 형변환을 해야하기 때문에 번거로움이 있다.
예를 들어 Person의 클래스를 만들어서 써먹고 싶으면 (Person)이란 형변환을,,
int를 쓰고 싶으면 (int)로 형변환을 해야한다.
==> 이러한 단점을 보완하기 위해 자료형을 제한해서 쓰고 싶어서 제네릭이란 것이 만들어짐
5. ArrayList 와 LinkedList 의 다른 동작방식
remove 관련
ArrayList 는 배열과 같은 전통적인 방식을 가지고 있다. 입력한 순으로 연속된 메모리이다. remove를 사용할때 index(1) 을 지운다면 없어진 데이터 자리에 값을 채우기 위해 뒤에있는 모든 데이터가 (index-1) 즉, 자리이동을 한칸씩 하게 된다.
(데이터의 특정위치(중간에) 추가,삭제가 빈번하지 않을때 사용)
LinkedList 는 데이터만 생기는 것이 아니라 데이터를 생성하면서 다음에 올 데이터 주소값을 가르키고 있기때문에 데이터의 자리이동이 없다.
(데이터의 특정위치(중간에) 추가,삭제가 빈번할때 사용)
6. List 와 Map 의 사용방식에 따른 쓰임새
List == index로 접근함
Map == index가 아닌 key로 접근하니 보다 더 직관적이다
'JAVA > JAVA' 카테고리의 다른 글
자바 개념 - 생성자에 대한 설명과 주의사항 (0) | 2016.06.12 |
---|---|
자바 추상메소드 abstract 관련 설명 (0) | 2016.06.12 |
자바 Wrapper class 관련 설명 및 예제 (0) | 2016.06.12 |
자바 날짜와 시간 관련 클래스 - 종류 및 예제 (0) | 2016.06.12 |
자바 예제 - Calendar : Calendar 를 이용한 월,일,시,분,초 그리고 요일 알아내기 (0) | 2016.06.12 |