Collection 프레임워크ArrayListCollection 요소를 순회하는 IteratorSetHashSet클래스TreeSet 클래스MapHashMapTreeMapLinkedHashMapWeakHashMapPriority Queue
Collection 프레임워크

- Collection 쪽은 하나의 요소를 쭈욱 나열해서 관리할때
- Map은 key-value
ArrayList
- 기존의 배열 선언과 사용 방식은 배열의 길이를 정하고 요소의 개수가 배열의 길이보다 커지면 배열을 재할당하고 복사해야 했음
- ArrayList는 객체 배열을 좀 더 효율적으로 관리하기 위해 자바에서 제공해 주는 클래스
Collection 요소를 순회하는 Iterator
- 순서가 있는 List인터페이스의 경우는 Iterator를 사용 하지 않고 get(i) 메서드를 활용할 수 있음
- Set 인터페이스의 경우 get(i) 메서드가 제공되지 않으므로 Iterator를 활용하여 객체를 순회함
사용 시
- boolean hasNext() : 이후에 요소가 더 있는지를 체크하는 메서드, 요소가 있다면 true를 반환
- E next() : 다음에 있는 요소를 반환
public boolean removeMember(int memberId){ // 멤버 아이디를 매개변수로, 삭제 여부를 반환 Iterator<Member> ir = arrayList.iterator(); while(ir.hasNext()) { Member member = ir.next(); int tempId = member.getMemberId(); if(tempId == memberId){ // 멤버아이디가 매개변수와 일치하면 arrayList.remove(member); // 해당 멤버를 삭제 return true; // true 반환 } } System.out.println(memberId + "가 존재하지 않습니다"); //for 가 끝날때 까지 return 이 안된경우 return false; }
Set
HashSet클래스
- 멤버의 중복 여부를 체크하기 위해 인스턴스의 동일성을 확인해야 함
- 동일성 구현을 위해 필요에 따라 equals()와 hashCode()메서드를 재정의 해야 함
- 삽입 순서는 보존x
TreeSet 클래스
- 객체를 중복해서 저장할 수 없고 저장 순서가 유지되지 않는다는 Set의 성질을 그대로 갖고 있음
- HashSet과 달리 TreeSet은 이진 탐색 트리 구조로 이루어져 있어, 추가와 삭제에는 시간이 조금 더 걸리지만, 정렬, 검색에 높은 성능을 보임
- 기본적으로 nature ordering지원. 생성자의 매개변수로 Comparaotr 객체 입력하여 정렬 방법 지정가능
- 객체의 정렬에 사용하는 클래스(binary search tree에서 inorder traverse를 하면 정렬이 되기에)
- 비교 대상이 되는 객체에 Comparable이나 Comparator 인터페이스를 구현 해야 TreeSet에 추가 될 수 있음(대부분 Comparable을 씀)
- Comparable
// 구현해야 하는 method @Override public int compareTo(Member member) { //return (this.memberId - member.memberId); //오름차순 return (this.memberId - member.memberId) * (-1); //내림 차순 }
- 이미 Comparable이 구현된 경우 Comparator로 비교하는 방식을 다시 구현할 수 있음
Map
HashMap
TreeMap
- key에 대한 정렬을 구현할 수 있음
- key가 되는 클래스에 Comparable이나 Comparator인터페이스를 구현함으로써 key-value 쌍의 자료를 key값 기준으로 정렬하여 관리할수 있음
LinkedHashMap
- removeEldestEntry 라는 메서드가 있어 put, putAll 등으로 map 에 entry 가 추가 될 때 가장 오래된 entry를 삭제해주는 로직이 구현되어 있음
WeakHashMap
- 해당 맵에 들어있는 키 중 참조하지 않는 키가 생기게 되면 그 키에 해당하는 entry는 map에서 삭제가 되게 됨