컬렉션 프레임워크
컬렉션 : 객체를 수집해 저장하는 것
컬렉션 프레임워크는 저장할 수 있는 객체 수가 배열을 생성할 때 결정되고, 객체를 삭제했을 때 인덱스가 비게되는 배열의 문제점을 보완하기 위해 등장했다.
컬렉션 프레임워크의 경우 인덱스가 빠진 곳은 자동으로 채워지게 된다.
1. 컬렉션 라이브러리 : 객체를 추가, 삭제, 검색할 수 있는 메소드를 모아놓았음
2. java.util
3. 인터페이스->클래스 : 부모가 인터페이스, 자식이 클래스라고 볼 수 있음
컬렉션 프레임워크의 주요 인터페이스
List는 배열과 유사하다. 인덱스를 가지며, 데이터는 객체로 되어있다.
객체는 중복이 허용되어 동일한 객체가 들어가 있어도 상관없다.
Set은 구슬 주머니에 객체들이 담겨있는 형식이다.
객체는 중복이 허용되지 않는다.
Map은 키(key)와 값(value)으로 되어있다.
키1에는 a가 들어가 있다는 식으로 구성되어 있으며, 키는 중복이 안되고, 값은 중복이 허용된다.
List, Set, Map은 모두 인터페이스고, 그 아래는 모두 클래스다. 그래서 인터페이스를 참조변수로 만들고, 그 아래의 클래스를 선택해서 객체를 생성해서 사용하면 된다.
List 컬렉션
특징
- 인덱스 형식으로 되어 있다.
- 인덱스는 중복이 안되지만, 객체의 경우에는 중복이 허용된다.
주요 메서드
- boolean add : 마지막에 객체 추가(0~10까지 인덱스가 있다면 10에 추가)
- void add : 해당하는 인덱스에 E객체를 추가하며, 그 위치에 있던 인덱스부터는 뒤로 밀려남
- set : 해당하는 인덱스의 객체를 E객체로 변경
- boolean contains : o라는 객체가 있는지 검색하고, 있다면 참, 없으면 거짓 리턴
- get : 해당 인덱스에 저장되어 있는 객체를 가져옴
- isEmpty : 객체.isEmpty를 하면 그 객체가 비어있는지를 검색
- size : 객체 수
- clear : 모든 객체를 삭제
- remove : 인덱스에 해당하는 객체를 삭제(7을 삭제했으면, 8번부터 앞으로 땡겨옴)
- boolean remove : 인덱스에 해당하는 객체를 적으면 그 객체를 바로 삭제
ArrayList
저장 용량
- 제네릭과 함께 등장
- List는 인터페이스이기 때문에 타입만 가져오고, ArrayList클래스로 객체 생성
- 객체의 추가는 add를 사용해서 계속 추가
객체 제거
- 앞번호 인덱스가 삭제되면 뒷 번호의 인덱스들이 한칸씩 앞으로 땡겨짐
<예제>
remove에서 인덱스를 선택하면 그 인덱스의 객체가 없어지고 뒷 번호 인덱스의 객체들이 한칸씩 땡겨져 오고, 객체값을 직접적으로 입력하면 그 객체가 삭제되는 것을 알 수 있음
<예제>
Set 컬렉션
특징
- 인덱스가 없기 때문에 순서 유지가 안된다
- 객체의 중복이 허용되지 않음
주요 메서드
- Iterator<E> iterator() : iterator은 객체이며, 여기에는 hasNext와 next가 해당한다.
<예제>
Map 컬렉션
특징
- Map.Entry가 객체
- 컬렉션은 제네릭을 사용해서 타입을 지정해 사용
- 키는 중복이 불가능하고, 값은 중복 지정이 가능
- 인덱스가 없기 때문에 Set과 마찬가지로 순서는 없음
주요 메소드
- put : 키와 매개변수 2개를 사용해서 값을 저 장
- containsKey : 키가 있으면 참
- containtValue : 값이 있으면 참
- 제네릭을 사용해서 키와 값을 담고, entrySet메소드를 사용?
- 모든 키에대한 Set을 Set객체에 담는다
- 모든 값을 Collection에 담는다
- 나머지는 이전의 것들과 유사한 맥락
<예제>
map.put에서 임영웅,30으로 넣으면 여전히 3개가 출력되지만, 값은 31->30으로 변하게 된다.
즉, 키 값이 중복되고, 값이 다른 경우에는 뒤에 들어온 값으로 덮어써진다는 것을 알 수 있다.
위에서 입력은 임영웅을 먼저 했는데, 영탁이 먼저 출력된 이유는 Map컬렉션에는 순서가 없기 때문에 랜덤으로 나왔기 때문이다.
keySet에서는 컬렉션에서 키 값만 가져온 것이라고 볼 수 있다.
여기서는 키를 받아서 값을 꺼내온 while문