1~2. ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›, ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค


์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์› (Collection Framework)

  • ์ปฌ๋ ‰์…˜ (Collection)
    • ์—ฌ๋Ÿฌ ๊ฐ์ฒด(๋ฐ์ดํ„ฐ)๋ฅผ ๋ชจ์•„ ๋†“์€ ๊ฒƒ
  • ํ”„๋ ˆ์ž„์› (Framework
    • ํ‘œ์ค€ํ™”, ์ •ํ˜•ํ™”๋œ ์ฒด๊ณ„์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹
  • ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์› (Collection Framework)
    • ์ปฌ๋ ‰์…˜(๋‹ค์ˆ˜์˜ ๊ฐ์ฒด)์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ํ™”๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹
    • ์ปฌ๋ ‰์…˜์„ ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณต
  • ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค (Collection Class)
    • ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค (e.g. Vector, ArrayList, HashSet)

์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›์˜ ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค

  • List : ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ. ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉ
    • ArrayList LinkedList Stack Vector ๋“ฑ
  • Set : ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ. ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ
    • HashSet TreeSet ๋“ฑ
  • Map : ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ. ์ˆœ์„œ ์œ ์ง€ X / ํ‚ค ์ค‘๋ณต X / ๊ฐ’ ์ค‘๋ณต O
    • HashMap TreeMap HashTable Properties ๋“ฑ

3~6. Collection, List, Set, Map


Collection ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ

// ์ถ”๊ฐ€
boolean add(Object o)
boolean addAll(Collection c)
// ์‚ญ์ œ
void clear()
boolean remove(Object o)
boolean removeAll(Collection c)
boolean retainAll(Collection c)
// ๊ฒ€์ƒ‰
boolean contains(Object o)
boolean containsAll(Collection c)

List ์ธํ„ฐํŽ˜์ด์Šค - ์ˆœ์„œ O, ์ค‘๋ณต O

// Collection ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ ํฌํ•จ
// ์ถ”๊ฐ€
void add(int index, Object element)
boolean addAll(int index, Collection c)
// ์‚ญ์ œ
Object remove(int index)
// ๊ฒ€์ƒ‰
int indexOf(Object o)
int lastIndexOf(Object o)
// ์ฝ๊ธฐ
Object get(int index)
// ์“ฐ๊ธฐ
Object set(int index, Object element)
// ์ •๋ ฌ
void sort(Comparator c)

Set ์ธํ„ฐํŽ˜์ด์Šค - ์ˆœ์„œ X, ์ค‘๋ณต X

  • Collection ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ์™€ ๋™์ผ

Map ์ธํ„ฐํŽ˜์ด์Šค - ์ˆœ์„œ X, ์ค‘๋ณต (ํ‚ค X, ๊ฐ’ O)

// ์ถ”๊ฐ€
Object put(Object key, Object value)
void putAll(Map t)
// ์‚ญ์ œ
Object remove(Object key)
// ๊ฒ€์ƒ‰
boolean containsKey(Object key)
boolean containsValue(Object value)
Object get(Object key)
// ์ฝ๊ธฐ
Set entrySet()
Set keySet()
Collection values()

7~11. ArrayList


ArrayList

  • ๊ธฐ์กด์˜ Vector ๋ฅผ ๊ฐœ์„ ํ•œ ๊ฒƒ์œผ๋กœ ๊ตฌํ˜„ ์›๋ฆฌ์™€ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋™์ผ
    • Vector ๋Š” ์ž์ฒด์ ์œผ๋กœ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ์Œ
  • List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฏ€๋กœ, ์ €์žฅ ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋˜๊ณ  ์ค‘๋ณต์„ ํ—ˆ์šฉ
  • ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๊ณต๊ฐ„์œผ๋กœ ๋ฐฐ์—ด์„ ์‚ฌ์šฉ (๋ฐฐ์—ด ๊ธฐ๋ฐ˜)

ArrayList ์˜ ๋ฉ”์„œ๋“œ

// ์ƒ์„ฑ์ž
ArrayList()
ArrayList(Collection c)
ArrayList(int initialCapacity)
// ์ถ”๊ฐ€
boolean add(Object o)
void add(int index, Object element)
boolean addAll(Collection c)
boolean addAll(int index, Collection c)
// ์‚ญ์ œ
boolean remove(Object o)
Object remove(int index)
boolean removeAll(Collection c)
void clear()
// ๊ฒ€์ƒ‰
int indexOf(Object o)
int lastIndexOf(Object o)
boolean contains(Object o)
Object get(int index)
Object set(int index, Object element)

ArrayList ์— ์ €์žฅ๋œ ๊ฐ์ฒด์˜ ์‚ญ์ œ ๊ณผ์ •

for (int i = list.size() - 1; i >= 0; i--) {
	list.remove(i);
}
  • ๋งˆ์ง€๋ง‰ ๊ฐ์ฒด๋ถ€ํ„ฐ ์‚ญ์ œํ•ด์•ผ ์„ฑ๋Šฅ ํ–ฅ์ƒ + ์ „์ฒด ์‚ญ์ œ ๊ฐ€๋Šฅ

Array ์™€ List ์˜ ์ฐจ์ด


// ๋ฐฐ์—ด - ์ถ”๊ฐ€, ์‚ญ์ œ๊ฐ€ ์–ด๋ ต๋‹ค. ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.
int[] numbers = {10,20,30,40,50};
 
// ๋ฆฌ์ŠคํŠธ (ArrayList)
ArrayList numbers = new ArrayList();
 
numbers.add(10); // ์ถ”๊ฐ€
numbers.remove(0); // ์‚ญ์ œ
 
// ๋ฆฌ์ŠคํŠธ (LinkedList)
LinkedList numbers = new LinkedList();
 
numbers.add(10); // ์ถ”๊ฐ€
numbers.remove(0); // ์‚ญ์ œ

Array

  • ์„ ์–ธ๊ณผ ๋™์‹œ์— ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜๋ฉฐ, ๊ธฐ๋Šฅ์ด ์—†์Œ
  • ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค์— ๋”ฐ๋ผ์„œ ๊ฐ’์„ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— null ๊ฐ’์ด ๋‚จ๊ฒŒ ๋จ (๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„)
  • ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ณ  ์ž์ฃผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ Array ๊ฐ€ ๋” ํšจ์œจ์ 

List

  • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ชจ์ž„ (Sequence ๋ผ๊ณ ๋„ ๋ถ€๋ฆ„)
  • ๊ฐ€๋ณ€๊ธธ์ด์˜ ํŠน์„ฑ์„ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์Œ
  • Array List ์™€ Linked List ๋‘๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•จ

12~14. LinkedList


๋ฐฐ์—ด์˜ ์žฅ๋‹จ์ 

  • ์žฅ์ 
    • ๋ฐฐ์—ด์€ ๊ตฌ์กฐ๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(์ ‘๊ทผ ์‹œ๊ฐ„, access time)์ด ์งง์Œ
  • ๋‹จ์ 
    • ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•จ
    • ํฌ๊ธฐ ๋ณ€๊ฒฝ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ถฉ๋ถ„ํžˆ ํฐ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„
  • ๋น„์ˆœ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€, ์‚ญ์ œ์— ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆผ
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ์•ผ ํ•จ
    • ๊ทธ๋Ÿฌ๋‚˜ ์ˆœ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€(๋์— ์ถ”๊ฐ€)์™€ ์‚ญ์ œ(๋๋ถ€ํ„ฐ ์‚ญ์ œ)๋Š” ๋น ๋ฆ„

๋ฐฐ์—ด์˜ ๋‹จ์ ์„ ๋ณด์™„

  • ๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ LinkedList ๋Š” ๋ถˆ์—ฐ์†์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐ
  • ๋ฐ์ดํ„ฐ์˜ ์‚ญ์ œ : ๋‹จ ํ•œ ๋ฒˆ์˜ ์ฐธ์กฐ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ ๊ฐ€๋Šฅ
    • ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ๋“œ๋กœ์จ ์„œ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์Œ
class Node {
	Node next;  // ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ
	Object obj; // ๋ฐ์ดํ„ฐ
}
  • ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€ : ํ•œ๋ฒˆ์˜ Node ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๋‘ ๋ฒˆ์˜ ์ฐธ์กฐ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ ๊ฐ€๋Šฅ

์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

  • LinkedList - ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ฑ์ด ๋‚˜์จ
  • Doubly Linked List - ์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ. ์ ‘๊ทผ์„ฑ ํ–ฅ์ƒ
class Node {
	Node next;     // ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ
	Node prvious;  // ์ด์ „ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ
	Object obj;    // ๋ฐ์ดํ„ฐ
}
  • Doubly Circular Linked List - ์ด์ค‘ ์›ํ˜• ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ
    • ์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ์™€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•œ ๊ตฌ์กฐ

ArrayList vs LinkedList - ์„ฑ๋Šฅ ๋น„๊ต

  1. ์ˆœ์ฐจ์  ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€/์‚ญ์ œ - ArrayList๊ฐ€ ๋น ๋ฆ„
  2. ๋น„์ˆœ์ฐจ์  ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€/์‚ญ์ œ - LinkedList๊ฐ€ ๋น ๋ฆ„
  3. ์ ‘๊ทผ์‹œ๊ฐ„(access time) - ArrayList๊ฐ€ ๋น ๋ฆ„

15~18. Stack๊ณผ Queue


  • Stack : LIFO(Last In First Out) ๊ตฌ์กฐ. ๋งˆ์ง€๋ง‰์— ์ €์žฅ๋œ ๊ฒƒ์„ ์ œ์ผ ๋จผ์ € ๊บผ๋ƒ„ (๋ฐฐ์—ด)
  • Queue : FIFO(First In First Out) ๊ตฌ์กฐ. ์ œ์ผ ๋จผ์ € ์ €์žฅํ•œ ๊ฒƒ์„ ์ œ์ผ ๋จผ์ € ๊บผ๋ƒ„ (๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ)

Stack

Stack st = new Stack(); // ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
// Stack์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
boolean empty()
// ๋งจ ์œ„์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
Object peek()
// ๋งจ ์œ„์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊บผ๋ƒ„
Object pop()
// Stack์— ๊ฐ์ฒด ์ €์žฅ
Object push(Object item)
// Stack ์— ์ฃผ์–ด์ง„ ๊ฐ์ฒด๋ฅผ ์ฐพ์•„์„œ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ (๋งจ ์œ„์—์„œ 1, 2, 3 ์ˆœ์œผ๋กœ)
int search(Object o)

Queue

Queue ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘๊ตฌํ˜„ ํ˜น์€ Queue ๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ
Queue q = new LinkedList(); // ์ดํ›„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
// Queue์— ๊ฐ์ฒด ์ถ”๊ฐ€. ์„ฑ๊ณตํ•˜๋ฉด true ๋ฐ˜ํ™˜. ์ €์žฅ๊ณต๊ฐ„ ๋ถ€์กฑ ์‹œ IllegalStateException ๋ฐœ์ƒ
boolean add(Object o)
// Queue์—์„œ ๊ฐ์ฒด๋ฅผ ๊บผ๋ƒ„. ๋น„์–ด์žˆ์œผ๋ฉด NoSuchElementException ๋ฐœ์ƒ
Object remove()
// ์‚ญ์ œ์—†์ด ์š”์†Œ๋ฅผ ์ฝ์Œ. peek๊ณผ ๋‹ฌ๋ฆฌ ๋น„์–ด์žˆ์œผ๋ฉด NoSuchElementException ๋ฐœ์ƒ
Object element()
// Queue์— ๊ฐ์ฒด ์ถ”๊ฐ€. ์„ฑ๊ณตํ•˜๋ฉด true ๋ฐ˜ํ™˜
boolean offer(Object o)
// Queue์—์„œ ๊ฐ์ฒด๋ฅผ ๊บผ๋ƒ„. ๋น„์–ด์žˆ์œผ๋ฉด null ๋ฐ˜ํ™˜
Object poll()
// ์‚ญ์ œ์—†์ด ์š”์†Œ๋ฅผ ์ฝ์Œ. ๋น„์–ด์žˆ์œผ๋ฉด null ๋ฐ˜ํ™˜
Object peek()

19~21. Stack๊ณผ Queue์˜ ํ™œ์šฉ


Stack ํ™œ์šฉ์˜ ์˜ˆ

  • ์ˆ˜์‹๊ณ„์‚ฐ
  • ์ˆ˜์‹๊ด„ํ˜ธ๊ฒ€์‚ฌ
  • ์›Œ๋“œํ”„๋กœ์„ธ์„œ์˜ undo/redo
  • ์›น๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ/์•ž์œผ๋กœ

Queue ํ™œ์šฉ์˜ ์˜ˆ

  • ์ตœ๊ทผ์‚ฌ์šฉ๋ฌธ์„œ
  • ์ธ์‡„์ž‘์—… ๋Œ€๊ธฐ๋ชฉ๋ก
  • ๋ฒ„ํผ

22~24. Iterator, Enumeration, Map


๊ฐœ์š”

  • ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
  • Enumeration ์€ Iterator ์˜ ๊ตฌ๋ฒ„์ „ (์ž˜์•ˆ์”€)
  • ListIterator ๋Š” Iterator ์˜ ์ ‘๊ทผ์„ฑ์„ ํ–ฅ์ƒ (๋‹จ๋ฐฉํ–ฅ โ†’ ์–‘๋ฐฉํ–ฅ) (์ž˜์•ˆ์”€)
// ์ฝ์–ด ์˜ฌ ์š”์†Œ๊ฐ€ ๋‚จ์•„์žˆ๋Š”์ง€ ํ™•์ธ
boolean hasNext()
// ๋‹ค์Œ ์š”์†Œ๋ฅผ ์ฝ์–ด ์˜ด
Object next()

๊ฐœ๋…

  • ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋œ ์š”์†Œ๋“ค์„ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ํ‘œ์ค€ํ™”ํ•œ ๊ฒƒ
    • List, Set, Map ๋ชจ๋‘ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉ

์‚ฌ์šฉ๋ฒ•

  • ์ปฌ๋ ‰์…˜์— iterator()๋ฅผ ํ˜ธ์ถœํ•ด์„œ iterator๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋ฅผ ์–ป์–ด์„œ ์‚ฌ์šฉ
List list = new ArrayList();
Iterator it = list.iterator();
while (it.hasNext()) {             // ์ฝ์–ด ์˜ฌ ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
	System.out.println(it.next()); // ๋‹ค์Œ ์š”์†Œ๋ฅผ ์ฝ์–ด์˜ด
}

Map๊ณผ Iterator

  • Map์—๋Š” iterator()๊ฐ€ ์—†๋‹ค.
    • Map์€ Collection์˜ ์ž์†์ด ์•„๋‹˜
    • keySet(), entrySet(), values()๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•จ
Map map = new HashMap();
Iterator it = map.entrySet().iterator();

25~29. Arrays


Arrays - ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๊ธฐ ํŽธ๋ฆฌํ•œ ๋ฉ”์„œ๋“œ(static) ์ œ๊ณต

  1. ๋ฐฐ์—ด์˜ ์ถœ๋ ฅ
int[] arr  = {1,2,3,4,5};
String list = Arrays.toString(arr); // [1,2,3,4,5] ๋ฐ˜ํ™˜
  1. ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ
int[] arr  = {1,2,3,4,5};
int[] arr2 = Arrays.copyOf(arr, 3);         // arr2 = [0,1,2]
int[] arr3 = Arrays.copyOfRange(arr, 2, 4); // arr3 = [2,3]
  1. ๋ฐฐ์—ด ์ฑ„์šฐ๊ธฐ
int[] arr = new int[5];
Arrays.fill(arr, 9);                                     // arr = [9,9,9,9,9]
Arrays.setAll(arr, (i) -> (int)(Math.random() * 5) + 1); // arr = [1,5,2,1,1]
  1. ๋ฐฐ์—ด์˜ ์ •๋ ฌ๊ณผ ๊ฒ€์ƒ‰
int[] arr = {3,2,0,1,4};
int idx = Arrays.binarySearch(arr, 2);    // idx = -5 <- ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ
// ์ด์ง„ํƒ์ƒ‰์€ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ๋งŒ ๊ฐ€๋Šฅ
Arrays.sort(arr);                         // arr ์ •๋ ฌ
System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]
int idx = Arrays.binarySearch(arr, 2);    // idx = 2 <- ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ
  1. ๋‹ค์ฐจ์› ๋ฐฐ์—ด์˜ ์ถœ๋ ฅ
int[]   arr   = {0,1,2,3,4};
int[][] arr2D = {{11,22}, {21,22}};
System.out.println(Arrays.toString(arr));       // [0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2D)); // [[11, 12], [21, 22]]
  1. ๋‹ค์ฐจ์› ๋ฐฐ์—ด์˜ ๋น„๊ต
String[][] str2D  = new String[][]{{"aaa","bbb"},{"AAA","BBB"}};
String[][] str2D2 = new String[][]{{"aaa","bbb"},{"AAA","BBB"}};
System.out.println(Arrays.equals(str2D, str2D2));     // false
System.out.println(Arrays.deepEquals(str2D, str2D2)); // true
  1. ๋ฐฐ์—ด์„ List๋กœ ๋ณ€ํ™˜
List list = Arrays.asList(new Integer[]{1,2,3,4,5}); // list = [1,2,3,4,5]
List list = Arrays.asList(1,2,3,4,5);                // list = [1,2,3,4,5]
list.add(6) // UnsupportedOperationException ์˜ˆ์™ธ ๋ฐœ์ƒ. ์ฝ๊ธฐ ์ „์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์—
List list = new ArrayList(Arrays.asList(1,2,3,4,5)); // ์ƒˆ๋กœ์šด ArrayList. ๋ณ€๊ฒฝ๊ฐ€๋Šฅ

30~33. Comparator์™€ Comparable


  • ๊ฐ์ฒด ์ •๋ ฌ์— ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ(์ •๋ ฌ๊ธฐ์ค€ ์ œ๊ณต)๋ฅผ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค
    • Comparable ๊ธฐ๋ณธ ์ •๋ ฌ๊ธฐ์ค€์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
    • Comparator ๊ธฐ๋ณธ ์ •๋ ฌ๊ธฐ์ค€ ์™ธ์— ๋‹ค๋ฅธ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ณ ์žํ•  ๋•Œ ์‚ฌ์šฉ
public interface Comparable { // o1, o2 ๋‘ ๊ฐ์ฒด๋ฅผ ๋น„๊ต
	int compareTo(Object o); // ์ฃผ์–ด์ง„ ๊ฐ์ฒด(o)๋ฅผ ์ž์‹ ๊ณผ ๋น„๊ต
}
public interface Comparator {
	int compare(Object o1, Object o2); // o1, o2 ๋‘ ๊ฐ์ฒด๋ฅผ ๋น„๊ต
	boolean equals(Object obj);        // equals๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋ผ๋Š” ๋œป
}
  • compare()์™€ compareTo()๋Š” ๋‘ ๊ฐ์ฒด์˜ ๋น„๊ต๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ž‘์„ฑ
public final class Integer extends Number implements Comparable {
	...
	public int compareTo(Integer anotherInteger) {
		int v1 = this.value;
		int v2 = anotherInteger.value;
		// ๊ฐ™์œผ๋ฉด 0, ์šฐ์ธก์ด ํฌ๋ฉด -1, ์ขŒ์ธก์ด ํฌ๋ฉด 1 ๋ฐ˜ํ™˜
		return (v1 < v2 ? -1 : (v1==v2? 0 : 1));
	}
}

Integer์™€ Comparable

public final class Integer extends Number implements Comparable {
	...
	public int compareTo(Object o) {
		return compareTo((Integer)o);
	}
	public int compareTo(Integer anotherInteger) {
		int thisValue = this.value;
		int anotherValue = anotherInteger.value;
		// ๊ฐ™์œผ๋ฉด 0, ๋น„๊ต๋Œ€์ƒ์ด ํฌ๋ฉด -1, ์ž์‹ ์ด ํฌ๋ฉด 1 ๋ฐ˜ํ™˜
		return (thisValue < anotherValue ? -1 : (thisValue ==anotherValue ? 0 : 1));
	}
}

34~38. HashSet


HashSet

  • Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋Œ€ํ‘œ์ ์ธ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค
  • ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด, LinkedHashSet ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ

TreeSet

  • ๋ฒ”์œ„ ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ์— ์œ ๋ฆฌํ•œ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค
  • HashSet ๋ณด๋‹ค ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, ์‚ญ์ œ์— ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆผ

HashSet - ์ฃผ์š” ๋ฉ”์„œ๋“œ

// ์ƒ์„ฑ์ž
HashSet()
HashSet(Collection c)
HashSet(int initialCapacity)                   // ์ดˆ๊ธฐ์šฉ๋Ÿ‰ ์„ค์ •
HashSet(int initialCapacity, float loadFactor) // ์–ธ์ œ ์šฉ๋Ÿ‰์„ ๋Š˜๋ฆด๊ฑด์ง€
// ์ถ”๊ฐ€
boolean add(Object o)
boolean addAll(Collection c) // ํ•ฉ์ง‘ํ•ฉ
// ์‚ญ์ œ
boolean remove(Object o)
boolean removeAll(Collection c) // ๊ต์ง‘ํ•ฉ
// ๋ชจ๋‘์‚ญ์ œ
void clear()
// ์กฐ๊ฑด๋ถ€์‚ญ์ œ
boolean retainAll(Collection c) // ์ฐจ์ง‘ํ•ฉ
// ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ
boolean contains(Object o)
boolean containsAll(Collection c) // ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š”์ง€
// ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ
boolean isEmpty()
// ์ €์žฅ๋œ ๊ฐ์ฒด ์ˆ˜ ํ™•์ธ
int size()
// ๊ฐ์ฒด๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
Object[] toArray()
Object[] toArray(Object[] a)

HashSet - ์˜ˆ์ œ 3

  • HashSet์€ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์ „์— ๊ธฐ์กด์— ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
    • ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ์—†์œผ๋ฉด ์ €์žฅ, ์žˆ์œผ๋ฉด ์ €์žฅ X
  • boolean add(Object o)๋Š” ์ €์žฅํ•  ๊ฐ์ฒด์˜ equals()์™€ hashCode()๋ฅผ ํ˜ธ์ถœ
    • equals()์™€ hashCode()๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
public boolean equals(Object o) {
	if (!(obj instanceof Person)) {
		return false;
	}
	Person tmp = (Person)obj;
	return name.equals(tmp.name) && age==tmp.age;
}
public int hashCode() {
	return Objects.hash(name, age);
}

39~45. TreeSet


TreeSet - ๋ฒ”์œ„ ํƒ์ƒ‰, ์ •๋ ฌ

  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(binary search tree)๋กœ ๊ตฌํ˜„. ๋ฒ”์œ„ ํƒ์ƒ‰๊ณผ ์ •๋ ฌ์— ์œ ๋ฆฌ.
  • ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ 2๊ฐœ์˜ ํ•˜์œ„ ๋…ธ๋“œ๋ฅผ ๊ฐ–์Œ
    • ๊ฐ ๋…ธ๋“œ๊ฐ€ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐ (LinkedList์˜ ๋ณ€ํ˜•)

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(binary search tree)

  • ๋ถ€๋ชจ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์€ ์™ผ์ชฝ, ํฐ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์— ์ €์žฅ
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ถ”๊ฐ€, ์‚ญ์ œ์— ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆผ (๋น„๊ต ํšŸ์ˆ˜ ์ฆ๊ฐ€)

TreeSet - ๋ฐ์ดํ„ฐ ์ €์žฅ๊ณผ์ • boolean add(Object o)

  • TreeSet ์— 7,4,9,1,5 ์˜ ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ

TreeSet - ์ฃผ์š” ์ƒ์„ฑ์ž์™€ ๋ฉ”์„œ๋“œ

// ์ƒ์„ฑ์ž
TreeSet()
HashSet(Collection c)
TreeSet(Comparator comp) // ์ฃผ์–ด์ง„ ์ •๋ ฌ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋Š” TreeSet ์ƒ์„ฑ
Object first() // ์ •๋ ฌ๋œ ์ˆœ์„œ์—์„œ ์ฒซ๋ฒˆ์งธ ๊ฐ์ฒด ๋ฐ˜ํ™˜
Object last()  // ์ •๋ ฌ๋œ ์ˆœ์„œ์—์„œ ๋งˆ์ง€๋ง‰ ๊ฐ์ฒด ๋ฐ˜ํ™˜
Object ceiling(Object o) // ์ง€์ •๋œ ๊ฐ์ฒด์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜. ์—†์œผ๋ฉด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํฐ ๊ฐ’ ๋ฐ˜ํ™˜
Object floor(Object o)   // ์ง€์ •๋œ ๊ฐ์ฒด์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜. ์—†์œผ๋ฉด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ž‘์€ ๊ฐ’ ๋ฐ˜ํ™˜
Object higher(Object o) // ์ง€์ •๋œ ๊ฐ์ฒด๋ณด๋‹ค ํฐ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ’ ๋ฐ˜ํ™˜
Object lower(Object o)  // ์ง€์ •๋œ ๊ฐ์ฒด๋ณด๋‹ค ์ž‘์€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ’ ๋ฐ˜ํ™˜
SortedSet subSet(Object fromElement, Object toElement) // ๋ฒ”์œ„ ๊ฒ€์ƒ‰์˜ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
SortedSet headSet(Object toElement)                    // ์ง€์ •๋œ ๊ฐ์ฒด๋ณด๋‹ค ์ž‘์€ ๊ฐ์ฒด๋“ค
SortedSet tailSet(Object fromElement)                  // ์ง€์ •๋œ ๊ฐ์ฒด๋ณด๋‹ค ํฐ ๊ฐ์ฒด๋“ค

46~51. HashMap


HashMap๊ณผ Hashtable - ์ˆœ์„œ X, ์ค‘๋ณต(ํ‚ค X, ๊ฐ’ O)

  • Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„. ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ €์žฅ
  • HashMap(๋™๊ธฐํ™” X)์€ Hashtable(๋™๊ธฐํ™”O)์˜ ์‹ ๋ฒ„์ „

HashMap

  • Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋Œ€ํ‘œ์ ์ธ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค
  • ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด LinkedHashMap ํด๋ž˜์Šค ์‚ฌ์šฉ

TreeMap

  • ๋ฒ”์œ„ ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ์— ์œ ๋ฆฌํ•œ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค
  • HashMap ๋ณด๋‹ค ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, ์‚ญ์ œ์— ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆผ

HashMap์˜ ํ‚ค(key)์™€ ๊ฐ’(value)

  • ํ•ด์‹ฑ(hashing) ๊ธฐ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ. ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„๋„ ๊ฒ€์ƒ‰์ด ๋น ๋ฆ„
  • Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„. ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ €์žฅ
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable {
	transient Entry[] table;
	...
	static class Entry implements Map.Entry {
		final Object key;
		Object value;
		...
	}
}

ํ•ด์‹ฑ(hashing)

  • ํ•ด์‹œํ•จ์ˆ˜(hash function)๋กœ ํ•ด์‹œํ…Œ์ด๋ธ”(hash table)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๊ฒ€์ƒ‰
  • ํ•ด์‹œํ…Œ์ด๋ธ”์€ ๋ฐฐ์—ด๊ณผ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์กฐํ•ฉ๋œ ํ˜•ํƒœ
  • ํ•ด์‹œํ•จ์ˆ˜๋Š” ๊ฐ™์€ ํ‚ค์— ๋Œ€ํ•ด ํ•ญ์ƒ ๊ฐ™์€ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ (์ €์žฅ ํ›„ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด)
  • ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค์ผ์ง€๋ผ๋„ ๊ฐ™์€ ๊ฐ’์˜ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ

HashMap - ์ฃผ์š” ๋ฉ”์„œ๋“œ

// ์ƒ์„ฑ์ž
HashMap()
HashMap(int initialCapacity)                   // ์ดˆ๊ธฐ์šฉ๋Ÿ‰ ์„ค์ •
HashMap(int initialCapacity, float loadFactor) // ์–ธ์ œ ์šฉ๋Ÿ‰์„ ๋Š˜๋ฆด๊ฑด์ง€
HashMap(Map m)                                 // ๋‹ค๋ฅธ Map์„ HashMap์œผ๋กœ ๋ณ€๊ฒฝ
// ์ถ”๊ฐ€
Object put(Object key, Object value)
void putAll(Map m)
// ์‚ญ์ œ
Object remove(Object key)
// ์ˆ˜์ •
Object replace(Object key, Object value)
boolean replace(Object key, Object oldValue, Object newValue)
// ์ฝ์–ด์˜ค๊ธฐ
Set entrySet()
Set keySet()
Collection values()
// ํƒ์ƒ‰
Object get(Object key)
Object getOrDefault(Object key, Object defaultValue)
boolean containsKey(Object key)
boolean containsValue(Object value)

52~54. Collections ํด๋ž˜์Šค


Collections - ์ปฌ๋ ‰์…˜์„ ์œ„ํ•œ ๋ฉ”์„œ๋“œ(static)๋ฅผ ์ œ๊ณต

  1. ์ปฌ๋ ‰์…˜ ์ฑ„์šฐ๊ธฐ, ๋ณต์‚ฌ, ์ •๋ ฌ, ๊ฒ€์ƒ‰ - fill(), copy(), sort(), binarySearch() ๋“ฑ
  2. ์ปฌ๋ ‰์…˜์˜ ๋™๊ธฐํ™” - synchronizedXXX()
  3. ๋ณ€๊ฒฝ๋ถˆ๊ฐ€(readOnly) ์ปฌ๋ ‰์…˜ ๋งŒ๋“ค๊ธฐ - unmodifiableXXX()
  4. ์‹ฑ๊ธ€ํ†ค ์ปฌ๋ ‰์…˜ ๋งŒ๋“ค๊ธฐ(๊ฐ์ฒด 1๊ฐœ๋งŒ ์ €์žฅ) - singletonXXX()
  5. ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋งŒ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ๋งŒ๋“ค๊ธฐ - checkedXXX()