ex. 10개의 Product 객체를 저장해 두고, 필요할 때 마다 하나씩 꺼내서 이용한다고 가정한다.
어떻게 Product를 효율적으로 추가, 검색, 삭제할 수 있을까? 👉 배열을 이용한다.하지만 배열은 저장할 수 있는 객체 수가 배열을 생성할 때 결정되서 불특정 다수일 경우는 문제가 있다.
또한, 객체를 삭제하는 경우 인덱스가 비게되어 새로운 객체를 저장하려면 어디가 비어있는지 확인하는 코드도 필요하다.이러한 문제점을 해결하기위해, 널리 알려져있는 자료구조를 바탕으로!
객체들을 효율적으로 추가,삭제, 검색할 수 있도록 java.util 패키지에 컬렉션에 관련 된 인터페이스와 클래스들을 포함시켜놓았는데, 이게 바로 컬렉션 프레임워크(Collection Framework)다.
Collection : 요소를 수집해서 저장
Framework : 사용방법을 미리 정해 놓은 라이브러리
👉일정 타입의 데이터들이 모여 쉽게 가공 할 수 있도록 지원하는 자료구조들의 기본 구조
ArrayList, Vector, LinkedList는 List 인터페이스를 구현하는 클래스
List 인터페이스로 사용이 가능하다.
HashSet, TreeSet은 Set interface를 구현하는 클래스
Set 인터페이스로 사용 가능하다.
List와 Set은 객체를 추가, 삭제, 검색하는 방법에 대해 많은 공통점이 있기 때문에, 이 인터페이스들의 공통된 메소드들만 모아 Collection 인터페이스로 정의함
메소드 | 설명 |
---|---|
add(E e) | 객체를 맨끝에 추가 |
add(int index, E element) | 주어진 인덱스를 객체에 추가 |
set(int index, E element) | 주어진 인덱스의 저장된 객체를 주어진 객체로 변경 |
contains(Object o) | 주어진 객체가 저장되어 있는지의 여부 판단 |
get(int index) | 저장된 객체 리턴 |
isEmpty() | 컬렉션이 비어있는지 조사 |
size() | 저장되어 있는 전체 객체 수를 리턴 |
clear() | 저장 된 모든 객체 삭제 |
remove(int index) | 주어진 인덱스에 저장된 객체 삭제 |
remove(Object o) | 주어진 객체 삭제 |
메소드 | 설명 |
---|---|
push(E item) | 주어진 객체를 스택에 넣는다. |
peek() | 스택 맨 위의 객체를 가져온다. 객체를 스택에서 제거하지 않는다. |
pop() | 스택의 맨 위 객체를 가져온다. 객체를 스택에서 제거한다. |
public Class coin(){
private int value;
public coin(int value){
this.value = value;
}
public int getValue(){
return value;
}
}
import java.util.*;
public class StackExample{
public static void main(Stirng[] args){
Stack<Coin> coinBox = new Stack<Coin>()'
coinBox.push(new Coin(100));
coinBox.push(new Coin(50));
coinBox.push(new Coin(500));
coinBox.push(new Coin(10));
while(!coinBox.isEmpty()){
Coin coin = coinBox.pop();
System.out.println("꺼내온 동전 : " + coin.getValue() + "원");
}
}
}
결과 : (먼저 넣은 동전이 나중에 나옴)
꺼내온동전 : 10원
꺼내온동전 : 500원
꺼내온동전 : 50원
꺼내온동전 : 100원
메소드 | 설명 |
---|---|
offer(E item) | 주어진 객체를 넣는다. |
peek() | 객체를 가져온다. 객체를 제거하지 않는다. |
poll() | 객체를 가져온다. 객체를 제거한다. |
Queue<E> queue = new LinkedList<E>();
public class Message{
public static void main(String[] args){
public String command;
public String to;
public Message(String command, String to){
this.command = command;
this.to = to;
}
}
}
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample{
public static void main(String[] args){
Queue<Message> messageQueue = new LinkedList<Message>();
//메세지 저장
messageQueue.offer(new Message("sendMail", "달구"));
messageQueue.offer(new Message("sendSMS", "빙고"));
messageQueue.offer(new Message("sendKaKaoTalk", "부강"));
//메세지 큐가 비었는지 확인
while(!messageQueue.isEmpty()){
//메세지 큐에서 한개의 메시지를 꺼냄
Message message = messageQueue.poll();
switch(message.command){
case "sendMail":
System.out.println(message.to + "님에게 메일을 보냅니다.");
break;
case "sendSMS":
System.out.println(message.to + "님에게 SMS를 보냅니다.");
break;
case "sendKaKaoTalk":
System.out.println(message.to + "님에게 카카오톡을 보냅니다.");
break;
}
}
}
}
- 결과 (먼저 넣은 메세지가 먼저 나옴)
달구님에게 메일을 보냅니다.
빙고님에게 sms를 보냅내다.
부강님에게 카카오톡을 보냅니다.