λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ‹œλ„/ꡭ비지원

[D+64] μžλ°”ν”„λ‘œκ·Έλž˜λ°8 (μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ κ°œλ…, List<E> μΈν„°νŽ˜μ΄μŠ€, 반볡자, μ»¬λ ‰μ…˜ λ³€ν™˜)

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2022. 12. 21.

 

 

ꡭ비지원 D+64

-  μžλ°”ν”„λ‘œκ·Έλž˜λ°8 -

 


 

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ κ°œλ…

- μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•œ μ»¬λ ‰μ…˜ 데이터 ꡬ쑰λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ 클래슀 및 μΈν„°νŽ˜μ΄μŠ€μ˜ 집합이닀.

- ν™•μž₯μ„±κ³Ό μœ μ—°μ„±μ΄ λ†’κ²Œν•˜λŠ” 라이브러리 집합이닀.

- ν”„λ ˆμž„μ›Œν¬λΌκ³  ν‘œν˜„ν•˜λ‚˜ 사싀상 라이브러리 λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.

 

• μ»¬λ ‰μ…˜ 데이터 ꡬ쑰

λ²”μš©μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 데이터 ꡬ쑰λ₯Ό μ˜λ―Έν•œλ‹€.

 

 


List<E> μΈν„°νŽ˜μ΄μŠ€

- μˆœμ„œκ°€ μžˆλŠ” λ°μ΄ν„°μ˜ 집합이닀.

- 쀑볡이 ν—ˆμš©λœλ‹€.

 

• ArrayList<E>

- λ°°μ—΄κΈ°λ°˜μ˜ 자료ꡬ쑰 이닀.

- 데이터가 변경없이 μœ μ§€λ˜λŠ” κ²½μš°μ— μ‚¬μš©ν•˜κΈ° μ’‹λ‹€.

 

μž₯점

1. μ§κ΄€μ μœΌλ‘œ μ΄ν•΄ν•˜κΈ°κ°€ 쉽닀.

2. λ°μ΄ν„°μ˜ μ½λŠ” 속도가 λΉ λ₯΄λ‹€.

 

단점

1. 데이터가 λ³€κ²½λ˜μ—ˆμ„ λ•Œ(μΆ”κ°€, μ‚­μ œ) 속도가 λŠλ €μ§„λ‹€. (μ˜€λ²„ν—€λ“œκ°€ 크닀)

μΆ”κ°€ : 데이터λ₯Ό μƒˆλ‘œ ν• λ‹Ή
μ‚­μ œ : λ°μ΄ν„°μ˜ κ³Όλ‹€ν•œ 이동

 

• LinkedList<E>

- 리슀트기반의 자료ꡬ쑰 이닀.

- 데이터가 λΉˆλ²ˆν•˜κ²Œ μΆ”κ°€λ‚˜ μ‚­μ œλ λ•Œ μ‚¬μš©ν•˜κΈ° μ’‹λ‹€.

 

μž₯점

1. λ°μ΄ν„°μ˜ μΆ”κ°€ 및 μ‚­μ œκ°€ μš©μ΄ν•˜λ‹€.

링크만 λ°”κΏ”μ£Όλ©΄ λλ‚œλ‹€ => ArrayList의 단점을 κ·Ήλ³΅ν•œ ꡬ쑰

 

단점

1. 데이터에 μ ‘κ·Όν• λ•Œ μƒλŒ€μ μœΌλ‘œ λŠλ¦¬λ‹€.

 

 


반볡자 (Iterator)

public static void main(String[] args) {
   List<String> list = new LinkedList<>();
   ....
   Iterator<String> itr = list.iterator(); ....
   while(itr.hasNext()) {    // next λ©”μ†Œλ“œκ°€ λ°˜ν™˜ν•  λŒ€μƒμ΄ μžˆλ‹€λ©΄,
      str = itr.next();    // next λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.
      ....
   }
}

λ‚΄λΆ€μžλ£Œκ΅¬μ‘°μ˜ ν˜•νƒœμ™€ 상관없이 λ°μ΄ν„°μ˜ μ‹œμž‘λΆ€ν„° λκΉŒμ§€ μˆœνšŒν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ λ³„λ„μ˜ μžλ£Œκ΅¬μ‘°μ΄λ‹€.

 

ν•„μš”μ„±

μš°λ¦¬κ°€ 데이터λ₯Ό λͺ‡λ²ˆμ§Έ κ°€μ Έμ˜€λΌκ³  ν–ˆμ„λ•Œμ—λŠ” μžλ£Œκ΅¬μ‘°μ— 따라 μ‰½κ²Œ κ°€μ Έμ˜¬ μˆ˜λ„ 있고 μ–΄λ ΅κ²Œ κ°€μ Έμ˜¬ μˆ˜λ„ μžˆλ‹€.

ν•˜μ§€λ§Œ μš°λ¦¬κ°€ λͺ¨λ“  데이터λ₯Ό κ°€μ Έμ˜€λΌκ³  ν–ˆμ„ κ²½μš°μ—” 내뢀ꡬ쑰와 상관없이 데이터λ₯Ό κ°€μ Έμ˜€λ©΄ 되며, μ΄λŠ” λΉˆλ²ˆν•˜κ²Œ μ‚¬μš©λœλ‹€.

κ·Έλž˜μ„œ 이λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ λ°˜λ³΅μžκ°€ μƒκ²¨λ‚œ 것이닀.

 

νŠΉμ§•

μ²˜μŒλΆ€ν„° λκΉŒμ§€ μˆœνšŒν•˜λŠ” λͺ©μ μ„ 가지고 있기 λ•Œλ¬Έμ— back이 λΆˆκ°€λŠ₯ν•˜λ‹€.

 

Iterator의 μ—°μ‚°

- E next() : λ‹€μŒ μΈμŠ€ν„΄μŠ€μ˜ 참쑰값을 λ°˜ν™˜ν•œλ‹€.

- boolean hasNext() : next λ©”μ†Œλ“œ 호좜 μ‹œ μ°Έμ‘° κ°’ λ°˜ν™˜ κ°€λŠ₯ μ—¬λΆ€λ₯Ό 확인할 수 μžˆλ‹€.

- void remove() : next λ©”μ†Œλ“œ ν˜ΈμΆœμ„ 톡해 λ°˜ν™˜ν–ˆλ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ‚­μ œν•  수 μžˆλ‹€.

 

• μ–‘λ°©ν–₯ 반볡자

List<E>λ₯Ό κ΅¬ν˜„ν•˜λŠ” 클래슀만 κ°€μ§ˆ 수 μžˆλŠ” λ°˜λ³΅μžμ΄λ‹€.

 

μ–‘λ°©ν–₯ 반볡자의 μ—°μ‚°

- E next() : λ‹€μŒ μΈμŠ€ν„΄μŠ€μ˜ 참쑰값을 λ°˜ν™˜ν•œλ‹€.

- boolean hasNext() : next λ©”μ†Œλ“œ 호좜 μ‹œ μ°Έμ‘°κ°’ λ°˜ν™˜ κ°€λŠ₯ μ—¬λΆ€λ₯Ό 확인할 수 μžˆλ‹€.

- void remove() : next λ©”μ†Œλ“œ ν˜ΈμΆœμ„ 톡해 λ°˜ν™˜ν–ˆλ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ‚­μ œν•  수 μžˆλ‹€.

- E previous() : next λ©”μ†Œλ“œμ™€ κΈ°λŠ₯은 κ°™κ³  λ°©ν–₯만 λ°˜λŒ€μ΄λ‹€.

- boolean hasPrevious() : hastNext λ©”μ†Œλ“œμ™€ κΈ°λŠ₯은 κ°™κ³  λ°©ν–₯만 λ°˜λŒ€μ΄λ‹€.

- void add(E e) : μΈμŠ€ν„΄μŠ€μ˜ 좔가이닀.

- void set(E e) : μΈμŠ€ν„΄μŠ€μ˜ 변경이닀.

 

 


μ»¬λ ‰μ…˜ λ³€ν™˜

• λ°°μ—΄λŒ€μ‹  ArrayList<E> μ‚¬μš©μ‹œ

List<String> list = Arrays.asList("Toy", "Robot", "Box");

- μž₯점 : μ €μž₯κ³Ό μ‚­μ œκ°€ λ³€ν•˜λ©°, Iteratorλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

- 단점 : μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•˜λŠ” μ½”λ“œκ°€ λΆˆκ°€ν•˜λ‹€.

- νŠΉμ§• : λ©”λͺ¨λ¦¬κ΅¬μ‘°κ°€ λ³€κ²½λΆˆκ°€λŠ₯ μΈμŠ€ν„΄μŠ€μ΄λ‹€.

 

-- μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€μ˜ μΆ”κ°€, μ‚­μ œκ°€ ν•„μš”ν•œ 경우
public ArrayList(Collection<? extends E> c) {...}

- Collection<E>λ₯Ό κ΅¬ν˜„ν•œ μ»¬λ ‰μ…˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό 인자둜 μ „λ‹¬λ°›λŠ”λ‹€.

- EλŠ” μΈμŠ€ν„΄μŠ€μ˜ μƒμ„±κ³Όμ •μ—μ„œ κ²°μ •λ˜λ―€λ‘œ 무엇이든 될 수 μžˆλ‹€.

- λ§€κ°œλ³€μˆ˜ C둜 μ „λ‹¬λœ μ»¬λ ‰μ…˜ μΈμŠ€ν„΄μŠ€μ—μ„œλŠ” μ°Έμ‘°(κΊΌλ‚΄κΈ°λ§Œ) κ°€λŠ₯ν•˜λ‹€.

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€