자료구조(Data Structure)
를 구현해 놓은 JDK 라이브러리최적화 된 알고리즘
을 사용할 수 있음여러 구현 클래스와 인터페이스의 활용에 대한 이해가 필요함
Document 참조 잘하기
collection, List, Set 같은 것들은 interface
프로그래머가 사용을 위해 직접 구현하는 경우도 많음
하나의 객체를 관리하기 위한 메서드가 선언된 인터페이스
하위에 List
와 Set
인터페이스가 있음
객체를 순서에 따라
저장하고 관리하는데 필요한 메서드가 선언된 인터페이스
자료구조 리스트 (배열, 연결리스트)의 구현을 위한 인터페이스
중복을 허용
함
ArrayList, Vector, LinkedList, Stack, Queue 등...
순서와 관계없이 중복을 허용하지 않고 유일한 값
을 관리하는데 필요한 메서드가 선언됨
아이디, 주민번호, 사번등을 관리하는데 유용
저장된 순서와 출력되는 순서는 다를 수 있음
HashSet, TreeSet등...
쌍(pair)로 이루어진 객체를 관리하는데 사용하는 메서드들이 선언된 인터페이스
객체는 key-value
의 쌍으로 이루어짐
key는 중복을 허용하지 않음
HashTable, HashMap, Properties, TreeMap 등이 Map 인터페이스를 구현 함
package ch10;
import java.util.ArrayList;
public class MemberArrayList {
private ArrayList<Member> arrayList; // 기본 capacity는 10
public MemberArrayList() {
arrayList = new ArrayList<Member>();
}
public MemberArrayList(int size) {
arrayList = new ArrayList<Member>(size);
}
public void addMember(Member member) {
arrayList.add(member);
}
public boolean removeMember(int memberId) {
for(int i = 0; i< arrayList.size();i++) {
Member member = arrayList.get(i);
int tempId = member.getMemberId();
if(tempId == memberId) {
arrayList.remove(i);
return true;
}
}
System.out.println(memberId + "가 존재하지 않습니다");
return false;
}
public void showAllMember() {
for(Member member : arrayList) {
System.out.println(member);
}
System.out.println();
}
}
public class MemberArrayListTest {
public static void main(String[] args) {
MemberArrayList memberArrayList = new MemberArrayList();
Member memberLee = new Member(1001, "이순신");
Member memberKim = new Member(1002, "김유신");
Member memberKang = new Member(1003, "강감찬");
Member memberHong = new Member(1004, "홍길동");
memberArrayList.addMember(memberLee);
memberArrayList.addMember(memberKim);
memberArrayList.addMember(memberKang);
memberArrayList.addMember(memberHong);
memberArrayList.showAllMember();
memberArrayList.removeMember(memberHong.getMemberId());
memberArrayList.showAllMember();
}
}
하나씩 차례로 참조
하는것Iterator
를 사용 하지 않고 get(i)
메서드를 활용할 수 있음Set 인터페이스의 경우 get(i) 메서드가 제공되지 않으므로 Iterator를 활용하여 객체를 순회함
boolean hasNext()
: 이후에 요소가 더 있는지를 체크하는 메서드, 요소가 있다면 true를 반환
E next()
: 다음에 있는 요소를 반환iterator를 활용한 remove 메서드 구현
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 인터페이스를 구현한 클래스와 멤버의 중복 여부를 체크하기 위해 인스턴스의 동일성을 확인해야 함
동일성 구현을 위해 필요에 따라 equals()
와 hashCode()메서드
를 재정의함
package ch12;
import java.util.HashSet;
import java.util.Iterator;
import ch10.Member;
public class MemberHashSet {
private HashSet<Member> hashSet;
public MemberHashSet() {
hashSet = new HashSet<Member>();
}
public void addMember(Member member) {
hashSet.add(member);
}
public boolean removeMember(int memberId) {
Iterator<Member> ir = hashSet.iterator();
while(ir.hasNext()) {
Member member = ir.next();
int tempId = member.getMemberId();
if(tempId == memberId) {
hashSet.remove(member);
return true;
}
}
System.out.println(memberId + "가 존재하지 않습니다");
return false;
}
public void showAllMember() {
for(Member member : hashSet) {
System.out.println(member);
}
System.out.println();
}
}
public class MemberHashSetTest {
public static void main(String[] args) {
MemberHashSet memberHashSet = new MemberHashSet();
Member memberLee = new Member(1001, "이순신");
Member memberKim = new Member(1002, "김유신");
Member memberKang = new Member(1003, "강감찬");
memberHashSet.addMember(memberLee);
memberHashSet.addMember(memberKim);
memberHashSet.addMember(memberKang);
memberHashSet.showAllMember();
Member memberHong = new Member(1003, "홍길동");
//1003 아이디 중복으로 추가되어 프린트 됨
// 멤버 ID가 같으면 같은 사람이라는 것을 인식 시켜 주어야 함
memberHashSet.addMember(memberHong);
memberHashSet.showAllMember();
}
}
// Member.java
...
@Override
// 같은 객체일때 동일한 해시코드를 가지게 하는 것!
public int hashCode() {
return memberId;
}
@Override
// equals == 객체의 동일성 비교
public boolean equals(Object obj) {
if( obj instanceof Member){
Member member = (Member)obj;
// 내가 가진 멤버 아이디와 매개변수의 멤버 아이디가 같은지 체크
if( this.memberId == member.memberId )
return true;
else
return false;
}
return false;
}
...