
자바 컬렉션 프레임워크는 객체를 효율적으로 저장·검색·삭제할 수 있도록 자료구조를 제공한다.
핵심 인터페이스는 Collection과 Map이다.
ArrayList, Vector, LinkedList)HashSet, TreeSet)HashMap, Hashtable, TreeMap, Properties)Entry)으로 저장,null 저장 가능.추가
boolean add(E e) : 맨 끝에 추가void add(int index, E element) : 인덱스에 추가E set(int index, E element) : 지정 인덱스의 객체를 변경검색
boolean contains(Object o) : 포함 여부boolean isEmpty() : 비었는지 확인int size() : 저장된 객체 수E get(int index) : 인덱스의 객체 반환삭제
void clear() : 전체 삭제E remove(int index) : 인덱스의 객체 삭제boolean remove(Object o) : 해당 객체 삭제List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
System.out.println(list.get(0)); // A
ArrayList와 동일.List<Integer> vector = new Vector<>();
vector.add(1);
vector.add(2);
System.out.println(vector.size()); // 2
List<String> linkedList = new LinkedList<>();
linkedList.add("X");
linkedList.add("Y");
linkedList.remove("X");
System.out.println(linkedList); // [Y]
null은 1개 가능.HashSet, LinkedHashSet, TreeSet.추가
boolean add(E e) : 성공 시 true, 중복 시 false검색
boolean contains(Object o)boolean isEmpty()int size()Iterator<E> iterator() : 반복자 획득삭제
void clear()boolean remove(Object o)hashCode() 값과 equals() 값이 같으면 같은 객체로 간주.Set<String> set = new HashSet<>();
set.add("Java");
set.add("Java"); // 중복 저장 안 됨
System.out.println(set.size()); // 1
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
Iterator<String> iter = set.iterator();
while (iter.hasNext()) {
String element = iter.next();
System.out.println(element);
}
Iterator 메소드
boolean hasNext() : 다음 요소 존재 여부E next() : 다음 요소 반환void remove() : 최근 반환한 객체 삭제추가
V put(K key, V value)검색
boolean containsKey(Object key)boolean containsValue(Object value)boolean isEmpty()int size()Set<Map.Entry<K,V>> entrySet()Set<K> keySet()Collection<V> values()삭제
void clear()V remove(Object key)hashCode()와 equals() 기준으로 동일 키 여부 판단.Map<Integer, String> map = new HashMap<>();
map.put(1, "Java");
map.put(2, "Python");
System.out.println(map.get(1)); // Java
HashMap과 구조 동일.Map<String, String> table = new Hashtable<>();
table.put("id", "admin");
System.out.println(table.containsKey("id")); // true
Hashtable의 하위 클래스.Properties props = new Properties();
props.setProperty("username", "admin");
props.setProperty("password", "1234");
System.out.println(props.getProperty("username")); // admin
Set 컬렉션.TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.add(1);
treeSet.add(2);
System.out.println(treeSet); // [1, 2, 3]
TreeSet과 달리 키-값(Entry) 를 저장.TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(2, "B");
treeMap.put(1, "A");
treeMap.put(3, "C");
System.out.println(treeMap); // {1=A, 2=B, 3=C}
TreeSet과 TreeMap에 저장되는 객체는 자동 정렬되며,Comparable 인터페이스를 구현해야 한다.Comparator 구현 객체를 제공한다.객체 자체에 **비교 기준(자연 순서)**을 구현.
int compareTo(T o)
0public class Person implements Comparable<Person> {
int age;
public Person(int age) { this.age = age; }
@Override
public int compareTo(Person o) {
return Integer.compare(this.age, o.age);
}
}
Comparable을 구현하지 않은 객체라도,
외부 비교자(Comparator) 를 제공하면 정렬 가능.
int compare(T o1, T o2)
0public class Fruit {
int price;
public Fruit(int price) { this.price = price; }
}
public class FruitComparator implements Comparator<Fruit> {
@Override
public int compare(Fruit o1, Fruit o2) {
return Integer.compare(o1.price, o2.price);
}
}
// 사용 예시
TreeSet<Fruit> set = new TreeSet<>(new FruitComparator());
set.add(new Fruit(3000));
set.add(new Fruit(1000));
set.add(new Fruit(2000));
자바는 스택(LIFO) 과 큐(FIFO) 자료구조를 제공한다.
Stack 클래스는 LIFO(후입선출) 자료구조.Stack<String> stack = new Stack<>();
stack.push("A");
stack.push("B");
System.out.println(stack.pop()); // B
System.out.println(stack.peek()); // A
주요 메소드
E push(E item) : 객체 저장E pop() : 맨 위 객체 꺼내기E peek() : 맨 위 객체 확인 (삭제 안 함)boolean isEmpty() : 비었는지 여부void clear() : 전체 삭제Queue 인터페이스는 FIFO(선입선출) 구조.LinkedList가 구현체로 사용된다.Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
System.out.println(queue.poll()); // A
System.out.println(queue.poll()); // B
주요 메소드
boolean offer(E e) : 객체 삽입E poll() : 객체 꺼내기ArrayList, HashSet, HashMap)은 동기화 미지원 → 멀티스레드 환경에서 안전하지 않음.Vector, Hashtable은 동기화 지원.Collections.synchronizedXXX() 메소드로 동기화된 컬렉션을 생성 가능.// 동기화된 List
List<Integer> syncList = Collections.synchronizedList(new ArrayList<>());
// 동기화된 Set
Set<String> syncSet = Collections.synchronizedSet(new HashSet<>());
// 동기화된 Map
Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());
of() 메소드List<String> list = List.of("A", "B", "C");
Set<Integer> set = Set.of(1, 2, 3);
Map<Integer, String> map = Map.of(1, "One", 2, "Two");
copyOf() 메소드List<String> origin = new ArrayList<>();
origin.add("X");
List<String> immutableList = List.copyOf(origin);
String[] arr = {"A", "B", "C"};
List<String> immutableList = Arrays.asList(arr);