자바는 널리 알려져 있는 자료구조를 사용해서 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록
인터페이스와 구현 클래스를 java.util패키지에 제공.
이들을 총칭해서 컬렉션 프레임워크라고 함.
주요 인터페이스로는 List, Set, Map이 있음
List 인터페이스의 메서드
List<String> list = ...; // list에 저장되는 객체를 String 타입으로 하겠다
list.add("홍길동"); // 맨 끝에 객체 추가
list.add(1, "신용권"); // 지정된 인덱스에 객체 삽입
String str = list.get(1); // 인덱스로 객체 검색
list.remove(0); // 인덱스로 객체 삭제
list.remove("신용권"); // 객체 삭제
for (int i=0; i<list.size(); i++){
String str = list.get(i); // i인덱스에 저장된 String 객체를 가져옴
}
for (String str: list){
// list에 저장된 객체 수만큼 반복하면서 객체를 하나씩 str에 대입
}
ArrayList
List<String> list = new ArrayList<String>();
List<String> list = new ArrayList<>();
// 타입 생략하면 왼쪽 list에 지정된 타입 따라감
Vector
List<E> list = new Vector<E>();
List<E> list = new Vector<>();
// 타입 생략하면 왼쪽 list에 지정된 타입 따라감
import java.util.List;
import java.util.Vector;
public class VectorExample {
public static void main(String[] args) {
List<Board> list = new Vector<Board>();
list.add(new Board("제목1", "내용1", "글쓴이1"));
list.add(new Board("제목2", "내용2", "글쓴이2"));
list.add(new Board("제목3", "내용3", "글쓴이3"));
list.add(new Board("제목4", "내용4", "글쓴이4"));
list.add(new Board("제목5", "내용5", "글쓴이5"));
list.remove(2);
list.remove(3);
for(int i=0; i<list.size(); i++) {
Board board = list.get(i);
System.out.println(board.subject + "\t" + board.content + "\t" + board.writer);
}
}
}
//출력결과
제목1 내용1 글쓴이1
제목2 내용2 글쓴이2
제목4 내용4 글쓴이4
LinkedList
List<E> list = new LinkedList<E>();
List<E> list = new LinkedList<>();
// 타입 생략하면 왼쪽 list에 지정된 타입 따라감
Set 인터페이스의 메서드
Set<String> set = ...;
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()){
//String 객체 하나를 가져옴
String str = iterator.next();
}
//삭제
while (iterator.hasNext()){
String str = iterator.next();
if(str.equals("홍길동")){
iterator.remove();
}
}
HashSet
Set<String> set = new HashSet<E>(String);
Set<E> set = new HashSet<E>();
Map 인터페이스의 메서드
Map<String, Integer> map = ...; // 키는 String 타입, 값은 Integer 타입으로
map.put("홍길동", 30); // 객체 추가
int score = map.get("홍길동"); // 객체 찾기
map.remove("홍길동"); // 객체 삭제
HashMap
Map<K, V> map = new HashMap<K, V>();
K = 키 타입
V = 값 타입
Map<String, Integer> map = new HashMap<String, Integer>();
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapExample {
public static void main(String[] args) {
//Map 컬렉션 생성
Map<String, Integer> map = new HashMap<String, Integer>();
//객체 저장
map.put("신용권", 85);
map.put("홍길동", 90);
map.put("동장군", 80);
map.put("홍길동", 95); // 키가 같아서 값 대체
System.out.println("총 Entry 수: " + map.size());
//객체 찾기
System.out.println("\t홍길동 : " + map.get("홍길동"));
System.out.println();
//객체를 하나씩 처리
Set<String> keySet = map.keySet();
Iterator<String> keyIterator = keySet.iterator();
while(keyIterator.hasNext()) {
String key = keyIterator.next();
Integer value = map.get(key);
System.out.println("\t" + key + " : " + value);
}
System.out.println();
//객체 삭제
map.remove("홍길동");
System.out.println("총 Entry 수: " + map.size());
//객체를 하나씩 처리
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
while(entryIterator.hasNext()) {
Map.Entry<String, Integer> entry = entryIterator.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("\t" + key + " : " + value);
}
System.out.println();
//객체 전체 삭제
map.clear();
System.out.println("총 Entry 수: " + map.size());
}
}
//출력결과
총 Entry 수: 3
홍길동 : 95
홍길동 : 95
신용권 : 85
동장군 : 80
총 Entry 수: 2
신용권 : 85
동장군 : 80
총 Entry 수: 0
Hashtable
Map<K, V> map = new Hashtable<K, V>();
K = 키 타입
V = 값 타입
Map<String, Integer> map = new Hashtable<String, Integer>();
LIFO(후입선출) 자료구조를 구현한 클래스
주요 메서드
리턴 타입 | 메서드 | 설명 |
---|---|---|
E | push(E item) | 주어진 객체를 스택에 넣음 |
E | peek() | 스택의 맨 위 객체를 가져옴 |
E | pop() | 스택의 맨 위 객체를 가져오고 스택에서 제거 |
//생성
Stack<E> stack = new Stack<E>();
FIFO(선입선출) 자료구조 구현한 클래스
주요 메서드
리턴 타입 | 메서드 | 설명 |
---|---|---|
boolean | offer(E item) | 주어진 객체를넣음 |
E | peek() | 객체 하나를 가져옴 |
E | poll() | 객체를 가져오고 큐에서 제거 |
Queue<E> queue = new LinkedList<E>();
// LinkedList 객체를 Queue 타입으로 변