List 인터페이스 : 순서가 정해져 있으므로 get(I)를 사용하여 참조 또한 가능하다.
Set 인터페이스 : get(I) 메서드가 제공되지 않으므로 Iterator를 활용하여 객체를 순회한다.
Iterator 함수를 호출하면 iterator가 반환이 된다.
hasNext() : 이후에 요소가 더 있는지를 체크하는 메서드
E.next() : 다음에 있는 요소를 반환
구현 코드 확인하기
1 2 3 4 5 6 7 8 9 10 11
Iterator<Member> ir = arrayList.iterator(); while (ir.hasNext()){ Member member = ir.next(); int tempId = member.getMemberId(); if (tempId == memberId){ arrayList.remove(member); returntrue; } } System.out.println(memberId + "가 존재하지 않습니다."); returnfalse;
publicbooleanremoveMember(int memberId){ // 중복이 가능하므로 어떤 요소를 삭제할 것인지 먼저 retrieve for (int i = 0; i < arrayList.size(); i++){ Member member = arrayList.get(i);
int tempId = member.getMemberId(); if (tempId == memberId){ arrayList.remove(i); returntrue; } } System.out.println(memberId + "가 존재하지 않습니다."); returnfalse; }
publicvoidshowAllMember(){
for (Member i :arrayList){ System.out.println(i); } System.out.println(); } }
Set
아이디, 주민번호, 사번 등 유일한 값들의 집합을 관리할 때 사용한다.
저정된 순서와 출력 순서가 달라질 수 있다.
HashSet
검색을 위한 알고리즘인 Hash 방식으로 구성되어 있고, key
순서와 관계가 없다.
멤버의 중복 여부를 체크하기 위해 인스턴스의 동일성을 확인해야 한다.
동일성 구현을 위해 필요에 따라 equals()와 hashCode() 메서드를 재정의함
hashCode는 객체를 구분하기 위한 unique한 값을 return하게 해준다.
Override 코드 확인하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
@Override publicinthashCode(){ return memberId; }
@Override publicbooleanequals(Object obj){ if (obj instanceof Member) { Member member = (Member)obj; if (this.memberId == member.memberId) { returntrue; } elsereturnfalse; } returnfalse; }
TreeSet
객체의 정렬에 사용하는 클래스 (중복을 허용하지 않는다.)
내부적으로 Binary Search Tree가 구현이 되어있다. (In-order traversal)
Java에서는 balance를 위해 레드-블랙 트리를 사용한다.
비교하기 위한 요소를 구현하여야한다.
작은 값은 왼쪽으로, 큰 값은 오른쪽으로 정렬하기 위해
element를 추가할 때마다 어떻게 비교할 지 comparable, comparator인터페이스를 구현하여야한다.
Comparable 코드 확인하기
1 2 3 4 5 6 7 8 9 10 11 12
// Comparable 인터페이스를 implement하여 compareTo 메서드를 오버라이딩 publicclassMemberimplementsComparable<Member> { ... @Override publicintcompareTo(Member member){ // this = 삽입되는 값 // this가 크면 양수를 반환하여 오른쪽으로 이동하게 구현되어 있다. // 값이 같으면 (중복되면) 0을 반환하여 삽입되지 않는다. // 내림 차순은 양수, 음수를 바꿔주면 된다. return (this.memberId - member.memberId); } }