
컬렉션 프레임워크
프로그램 구현에 필요한 자료구조를 구현해 놓은 JDK라이브러리입니다.
- java.util 패키지에 구현되어 있음
- 개발에 소요되는 시간을 절약하면서 최적화 된 알고리즘을 사용할 수 있음

Tree라는 말이 앞에 붙으면 정렬이 된다고 생각하면 됩니다.(바이너리 서치 트리)
Collection 인터페이스
- 하나의 객체를 관리하기 위한 메서드가 선언된 인터페이스의
- 하위에 List와 Set 인터페이스가 있음
List 인터페이스
- 객체를 순서에 따라 저장하고 관리하는데 필요한 메서드가 선언된 인터페이스
- 자료구조 리스트 (배열, 연결리스트)의 구현을 위한 인터페이스
- 중복을 허용함
- ArrayList, Vector, LinkedList, Stack, Queue 등...
ArrayList
ArrayList를 이용한 MemberArrayList 구현
public class MemberArrayList {
private ArrayList<Member> arrayList; // ArrayList 선언
public MemberArrayList(){
arrayList = new ArrayList<Member>(); //멤버로 선언한 ArrayList 생성
}
public void addMember(Member member){ //ArrayList 에 멤버 추가
arrayList.add(member);
}
public boolean removeMember(int memberId){ // 멤버 아이디를 매개변수로, 삭제 여부를 반환
for(int i =0; i<arrayList.size(); i++){ // 해당 아이디를 가진 멤버를 ArrayList에서 찾음
Member member = arrayList.get(i);
int tempId = member.getMemberId();
if(tempId == memberId){ // 멤버아이디가 매개변수와 일치하면
arrayList.remove(i); // 해당 멤버를 삭제
return true; // true 반환
}
}
System.out.println(memberId + "가 존재하지 않습니다"); //for 가 끝날때 까지 return 이 안된경우
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();
}
}
Set 인터페이스
- 순서와 관계없이 중복을 허용하지 않고 유일한 값을 관리하는데 필요한 메서드가 선언됨
- 아이디, 주민번호, 사번등을 관리하는데 유용
- 저장된 순서와 출력되는 순서는 다를 수 있음
- HashSet, TreeSet등...
HashSet
- 멤버의 중복 여부를 체크하기 위해 인스턴스의 동일성을 확인해야 함
- 동일성 구현을 위해 필요에 따라 equals()와 hashCode()메서드를 재정의함
HashSet을 이용한 MemberHashSet구현
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();
}
}
아이디가 동일한 경우 같은 멤버이므로 중복되지 않도록 Member클래스의 equals()와 hashcode()메서드 재정의해야 합니다.
Member.java
@Override
public int hashCode() {
return memberId;
}
@Override
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;
}
hashcode()메서드 같은 경우 물리적으로 같은 위치에 있지 않지만 논리적으로 같은 객체라는 것을 나타내기 위해 memberId로 지정해줬습니다. 주로 equals 메서드에서 같은지 비교하는 필드를 리턴합니다.
TreeSet
- 객체의 정렬에 사용하는 클래스
- Set 인터페이스를 구현하여 중복을 허용하지 않고, 오름차순이나 내림차순으로 객체를 정렬할 수 있음
- 내부적으로 이진검색트리(binary search tree)로 구현됨
- 이진검색트리에 저장하기 위해 각 객체를 비교해야 함
- 비교 대상이 되는 객체에 Comparable이나 Comparator 인터페이스를 구현 해야 TreeSet에 추가 될 수 있음
- String, Integer등 JDK의 많은 클래스들이 이미 Comparable을 구현했음
TreeSet을 이용한 MemberTreeSet구현
public class MemberTreeSet {
private TreeSet<Member> treeSet;
public MemberTreeSet(){
treeSet = new TreeSet<Member>();
}
public void addMember(Member member){
treeSet.add(member);
}
public boolean removeMember(int memberId){
Iterator<Member> ir = treeSet.iterator();
while( ir.hasNext()){
Member member = ir.next();
int tempId = member.getMemberId();
if( tempId == memberId){
treeSet.remove(member);
return true;
}
}
System.out.println(memberId + "가 존재하지 않습니다");
return false;
}
public void showAllMember(){
for(Member member : treeSet){
System.out.println(member);
}
System.out.println();
}
}
Member클래스가 아이디 오름차순으로 정렬되게 하기 위해 Comparable 인터페이스를 구현
Member.java
public class Member implements Comparable<Member>{
......
@Override
public int compareTo(Member member) {
//return (this.memberId - member.memberId); //오름차순
return (this.memberId - member.memberId) * (-1); //내림 차순
}
}
Map 인터페이스
- 쌍(pair)로 이루어진 객체를 관리하는데 사용하는 메서드들이 선언된 인터페이스
- 객체는 key-value의 쌍으로 이루어짐
- key는 중복을 허용하지 않음
- HashTable, HashMap, Properties, TreeMap 등이 Map 인터페이스를 구현 함
HashMap
- 가장 많이 사용되는 Map 인터페이스 기반 클래스
- key - value를 쌍으로 관리하는 메서드를 구현함
- 검색을 위한 자료구조
- key를 이용하여 값을 저정하고 key를 이용하여 값을 꺼내오는 방식 - hash 알고리즘으로 구현 됨
- key가 되는 객체는 중복될 수 없고 객체의 유일성을 비교를 위한 equals()와 hashCode() 메서드를 구현해야 함
HashMap을 이용해서 구현한 MemberHashMap
public class MemberHashMap {
private HashMap<Integer, Member> hashMap;
public MemberHashMap()
{
hashMap = new HashMap<Integer, Member>();
}
public void addMember(Member member){
hashMap.put(member.getMemberId(), member);
}
public boolean removeMember(int memberId){
if(hashMap.containsKey(memberId)){
hashMap.remove(memberId);
return true;
}
System.out.println(memberId + "가 존재하지 않습니다");
return false;
}
public void showAllMember(){
Iterator<Integer> ir = hashMap.keySet().iterator();
while (ir.hasNext()){
int key = ir.next();
Member member = hashMap.get(key);
System.out.println(member);
}
System.out.println();
}
}
showAllmember함수 저렇게 안하고 그냥 print hashmap해도 key, value값 나옵니다.
TreeMap 클래스
treeset + hashmap
- Map 인터페이스를 구현한 클래스이고 key에 대한 정렬을 구현할 수 있음
- key가 되는 클래스에 Comparable이나 Comparator인터페이스를 구현함으로써 key-value 쌍의 자료를 key값 기준으로 정렬하여 관리 할 수 있음
Iterator
Collection 요소를 순회합니다.
요소의 순회란?
컬렉션 프레임워크에 저장된 요소들을 하나씩 차례로 참조하는 것입니다.
- 순서가 있는 List인터페이스의 경우는 Iterator를 사용 하지 않고 get(i) 메서드를 활용할 수 있음
- Set 인터페이스의 경우 get(i) 메서드가 제공되지 않으므로 Iterator를 활용하여 객체를 순회함
Iterator 사용하기
- boolean hasNext() : 이후에 요소가 더 있는지를 체크하는 메서드, 요소가 있다면 true를 반환
- E next() : 다음에 있는 요소를 반환
MemberArrayList의 remove 메서드를 iterator로 구현
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;
}
'Java' 카테고리의 다른 글
| [Java] 제네릭 프로그래밍 (0) | 2022.10.01 |
|---|---|
| [Java] 자료구조 (0) | 2022.10.01 |
| [Java] 다형성 / 다운 캐스팅 (1) | 2022.09.23 |
| [Java] 상속 (1) | 2022.09.23 |
| [Java] Random값 생성 (0) | 2022.09.22 |