JCF, Java Collection Framework
(향상된) 배열
- 성능 향상
- 사용법 향상
- 길이 가변 > 배열의 길이가 늘었다 줄었다가 가능해진다.
컬렉션은 인터페이스이다.
컬렉션내의 크기와 정보를 알아내는 메서드
int size()
boolean isEmpty()
객체의 삽입을 담당하는 메서드
boolean add(Object element)
boolean addAll(Collection other)
객체의 삭제를 담당하는 메서드
boolean remove(Object obj)
boolean removeAll(Collection other)
void clear():해당 컬렉션의 모든 요소들을 제거한다 .
boolean retainAll(Collection other)
검색이나 정보의 확인을 위한 메서드들
boolean contains(Object obj)
boolean containsAll(Collection others)
Iterator iterator()
내부의 모든 요소들을 객체배열로 리턴하는 메서드들
Object[] toArray()
Object[] toArray(Object[] a)
1. List 계열
2. Set 계열
3. Map 계열
Iterable, Collection, List
Resizable-array implementation of the List interface. // 배열 길이 조정 가능
순수 배열하고 구조가 가장 유사함
//배열
//- 타입 명시(int)
//- 길이 명시(3)
int[] nums1 = new int[3];
//요소 접근> 첨자(index) 사용
nums1[0] = 10; //배열[index] > 인덱서(Indexer)
nums1[1] = 20;
nums1[2] = 30;
System.out.println(nums1[0]);
System.out.println(nums1[1]);
System.out.println(nums1[2]);
System.out.println(nums1.length);
System.out.println();
//컬렉션
//- 타입 명시(x) > Object 배열을 가지고 있음
//- 길이 명시(x) > 가변
//ArrayList nums2 = new ArrayList(); => 요즘은 이거 안 씀
ArrayList<Integer> nums2 = new ArrayList<Integer>();
//요소 접근
//- boolean add(T value)
//- Append(차례대로 추가)
nums2.add(100); //nums2[0] = 100
nums2.add(200); //nums2[1] = 200
nums2.add(300); //nums2[2] = 300
System.out.println(nums2.get(0));
System.out.println(nums2.get(1));
System.out.println(nums2.get(2));
System.out.println(nums2.size());
nums2.add(500);
nums2.add(600);
System.out.println(nums2.size()); //길이가 3개에서 5개로 자동으로 늘어남
System.out.println();
for(int i=0; i<nums2.size();i++) {
System.out.println(nums2.get(i));
}
//결과
10
20
30
3
100
200
300
3
5
100
200
300
500
600
ArrayList 기능
ArrayList<String> list = new ArrayList<String>();
// 1. 요소 추가하기
// - boolean add(T value)
// - 배열의 마지막에 추가 > Append Mode
list.add("바나나");
list.add("딸기");
list.add("사과");
list.add("포도");
list.add("귤");
// 2. 요소 개수
// -int size()
System.out.println(list.size()); //결과 : 5
// 3. 요소 읽기
// - T get(int index)
System.out.println(list.get(2)); //결과 : 사과
// System.out.println(list.get(5));// IndexOutOfBoundsException
System.out.println(list.get(list.size() - 1)); // 결과 : 귤
// 4. 요소 수정
// - T set(int index, T newValue)
String temp = list.set(2, "파인애플");
System.out.println(temp); //결과 : 사과 (해당 위치에 있던 값 반환)
System.out.println(list.get(2)); //결과 : 파인애플
// 5. 요소 삭제
// 방 없애기 > 길이 줄어든다. => 배열은 안됨. 방 개수가 고정
// - T remove(int index) > 방 번호를 찾아서 삭제
// - boolean remove(T value) > 값을 찾아서 삭제
// - 시프트 발생 > 삭제된 방 이후로 모든 요소의 방번호
System.out.println(list.size()); // 5
list.remove(2);
System.out.println(list.size()); // 4
System.out.println(list.get(3)); //귤
// 6. 요소 추가
// - 요소를 원하는 위치에 추가
// - Insert Mode
// - void add(int index, T value);
// - 시프트 발생 > 삽입된 방 이후의 모든 요소는 방번호 + 1
System.out.println(list.get(3)); //결과 : 귤
list.add(2, "망고");
System.out.println(list.get(3)); //결과 : 포도
System.out.println(list.size()); //결과 :5
//7. 요소 검색
//- int indexOf(T value)
//- int lastIndexOf(T value)
//- boolean contains(T value)
System.out.println(list.indexOf("사과")); //결과 : -1 (사과 없음)
System.out.println(list.indexOf("파인애플")); //결과 : -1 (파인애플 없음)
System.out.println(list.indexOf("포도")); //결과 : 3
//요소 삭제시 이름으로도 날릴 수 있음
list.remove(3); //이 형식을 많이 씀
list.remove("포도"); //동일한 포도를 식별하지 못하고 맨 처음 포도만 지움
System.out.println(list.indexOf("포도")); //결과 : -1
//8. 요소 탐색
for(int i=0; i< list.size();i++) {
System.out.println(list.get(i));
}
System.out.println();
//결과
//바나나
//딸기
//망고
//귤
//for문
//- 향상된 for문(Enhanced for statement)
//- for(변수 : 배열)
//- 루프 변수가 없음
// 무조건 처음부터 끝까지 가져오는 for문
for(String item : list) {
System.out.println(item);
}
System.out.println();
//결과
//바나나
//딸기
//망고
//귤
//9. 초기화
//- 모든 요소 삭제 > 모든방.remove()
//- void clear()
list.clear();
System.out.println(list.size()); //결과 : 0
//10. 빈배열 확인
//- boolean isEmpty()
System.out.println(list.isEmpty()); //true
System.out.println(list.size()==0); //true
list.add("사과");
System.out.println(list.isEmpty()); //false
System.out.println(list.size()==0); //false