2022. 5. 10. 21:52γJAVA/μλ°μ μ μ
https://hyejin.tistory.com/580
1οΈβ£ Stackκ³Ό Queue νμ©
μ€νμ νμ© μ : μμκ³μ°, μμκ΄νΈκ²μ¬, μλνλ‘μΈμμ undo/redo, μΉλΈλΌμ°μ μ λ€λ‘/μμΌλ‘
νμ νμ© μ : μ΅κ·Ό μ¬μ© λ¬Έμ, μΈμμμ λκΈ° λͺ©λ‘, λ²νΌ(buffer)
- Stack νμ© μ
-> μ λ ₯ν μμμ κ΄νΈκ° μ¬λ°λ₯Έμ§ 체ν¬νλ μμ λ‘ '('λ₯Ό λ§λλ©΄ μ€νμ λ£κ³ ')'λ₯Ό λ§λλ©΄ μ€νμμ '('λ₯Ό κΊΌλΈλ€.
')'λ₯Ό λ§λμ '('λ₯Ό κΊΌλ΄λ €κ³ ν λ μ€νμ΄ λΉμ΄μκ±°λ μμμ κ²μ¬νκ³ λ νμλ μ€νμ΄ λΉμ΄μμ§ μμΌλ©΄ κ΄νΈκ° μλͺ»λμλ€λ λ»μ΄λ€.
- Queue νμ© μ
-> history λͺ λ Ήμ΄λ₯Ό queueλ₯Ό μ΄μ©ν΄μ ꡬνν μμ μ΄λ€.
- PriorityQueue
Queue μΈν°νμ΄μ€μ ꡬν체 μ€μ νλλ‘, μ μ₯ν μμμ κ΄κ³μμ΄ μ°μ μμ λμ κ²λΆν° κΊΌλ΄κ² λλ€λ νΉμ§μ΄ μλ€.
κ·Έλ¦¬κ³ nullμ μ μ₯ν μ μλ€. nullμ μ μ₯νλ©΄ NPE λ°μνλ€.
PriorityQueueλ μ μ₯곡κ°μΌλ‘ λ°°μ΄μ μ¬μ©νλ©°, κ° μμλ₯Ό 'ν(heap)'μ΄λΌλ μλ£κ΅¬μ‘°μ ννλ‘ μ μ₯νλ€.
νμ μ΄μ§ νΈλ¦¬μ ν μ’ λ₯λ‘ κ°μ₯ ν° κ°μ΄λ κ°μ₯ μμ κ°μ λΉ λ₯΄κ² μ°Ύμ μ μλ€λ νΉμ§μ΄ μλ€.
-> μ μ₯μμκ° 3,5,1,2,4 μμλ λΆκ΅¬νκ³ μΆλ ₯κ²°κ³Όλ 1,2,3,4,5μ΄λ€. μ°μ μμλ μ«μκ° μμ μλ‘ λμκ²μ΄λ―λ‘ 1μ΄ κ°μ₯ λ¨Όμ μΆλ ₯λ κ²μ΄λ€. λ¬Όλ‘ μ«μ λΏλ§μλλΌ κ°μ²΄λ₯Ό μ μ₯ν μ μλλ° κ·Έλ΄ κ²½μ°μλ κ° κ°μ²΄μ ν¬κΈ°λ₯Ό λΉκ΅ν μ μλ λ°©λ²μ μ 곡ν΄μΌ νλ€.
μ°Έμ‘°λ³μ pqλ₯Ό μΆλ ₯νλ©΄ PriorityQueueκ° λ΄λΆμ μΌλ‘ κ°μ§κ³ μλ λ°°μ΄μ λ΄μ©μ΄ μΆλ ₯λλλ°, μ μ₯ν μμμ λ€λ₯΄κ² μ μ₯λμλ€.
κ·Έ μ΄μ λ νμ΄λΌλ μλ£κ΅¬μ‘°μ ννλ‘ μ μ₯λ κ²μ΄κΈ° λλ¬Έμ΄λ€!
- Deque(Double-Ended Queue)
Queueμ λ³νμΌλ‘ ν μͺ½ λμΌλ‘λ§ μΆκ°/μμ ν μ μλ Queueμ λ¬λ¦¬, Dequeλ μμͺ½ λμ μΆκ°/μμ κ° κ°λ₯νλ€.
2οΈβ£ Iterator, ListIterator, Enumeration
Iterator, ListIterator, Enumeration μ λͺ¨λ 컬λ μ μ μ μ₯λ μμλ₯Ό μ κ·Όνλλ° μ¬μ©λλ μΈν°νμ΄μ€μ΄λ€.
Enumerationμ Iteratiorμ ꡬ λ²μ μ΄λ©°, ListIteratorλ Iteratorμ κΈ°λ₯μ ν₯μ μν¨ κ²μ΄λ€.
- Iterator
: 컬λ μ νλ μμν¬μμλ 컬λ μ μ μ μ₯λ μμλ€μ μ½μ΄μ€λ λ°©λ²μ νμ€ννμλ€.
컬λ μ μ μ μ₯λ κ° μμμ μ κ·Όνλ κΈ°λ₯μ κ°μ§ Iterator μΈν°νμ΄μ€λ₯Ό μ μνκ³ , CollectionμΈν°νμ΄μ€μλ Iterator()λ₯Ό μ μνκ³ μλ€.
iterator()λ CollectionμΈν°νμ΄μ€μ μ μλ λ©μλμ΄λ―λ‘ Collection μΈν°νμ΄μ€μ μμμΈ List, Set μλ ν¬ν¨λμ΄ μλ€.
μ£Όλ‘ while λ¬Έμ μ¬μ©ν΄μ 컬λ μ ν΄λμ€μ μμλ€μ μ½μ΄μ¬ μ μλ€.
Collection c = new ArrayList();
Iterator it = c.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
-> ArrayList λμ Collection μΈν°νμ΄μ€λ₯Ό ꡬνν λ€λ₯Έ 컬λ μ ν΄λμ€μ λν΄μλ μ΄μ κ°μ΄ λμΌν μ½λλ₯Ό μ¬μ©ν μ μλ€.
μ κΈ°μ ArrayList λμ Collection μΈν°νμ΄μ€λ₯Ό ꡬνν λ€λ₯Έ 컬λ μ ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νλλ‘ λ³κ²½νκΈ°λ§ νλ©΄ λλ€.
iteratorλ₯Ό μ΄μ©ν΄μ 컬λ μ μ μμλ₯Ό μ½μ΄μ€λ λ°©λ²μ νμ€ννκΈ° λλ¬Έμ μ΄μ²λΌ μ½λμ μ¬μ¬μ©μ λμ΄λ κ²μ΄ κ°λ₯νλ€.
Map μΈν°νμ΄μ€λ₯Ό ꡬνν 컬λ μ ν΄λμ€λ ν€(key) μ κ°(value)μ μμΌλ‘ μ μ₯νκ³ μκΈ° λλ¬Έμ iterator()λ₯Ό μ§μ νΈμΆν μ μκ³ , κ·Έ λμ keySet() μ΄λ entrySet() κ³Ό κ°μ λ©μλλ₯Ό ν΅ν΄μ ν€μ κ°μ κ°κ° λ°λ‘ Set μ ννλ‘ μ»μ΄μ¨ νμ λ€μ iterator()λ₯Ό νΈμΆν΄μΌ Iteratorλ₯Ό μ»μ μ μλ€.
- ListIterator μ Enumeration
Enumerationμ 컬λ μ νλ μμν¬κ° λ§λ€μ΄μ§κΈ° μ μ μ¬μ©νλ κ²μΌλ‘ Iteratorμ ꡬλ²μ μΌλ‘ μκ°νλ©΄ λλ€.
μ΄μ λ²μ μμ€ μμ±λ μμ€μμ νΈνμ μν΄μ λ¨κ²¨λκ³ μλ κ²λΏμ΄κΈ° λλ¬Έμ κ°λ₯νλ©΄ Iteratorλ₯Ό μ¬μ©νλ©΄ λλ€.
ListIteratorλ Iteratorλ₯Ό μμλ°μμ κΈ°λ₯μ μΆκ°ν κ²μΌλ‘, 컬λ μ μ μμμ μ κ·Όν λ Iteratorλ λ¨λ°©ν₯μΌλ‘λ§ μ΄λν μ μλλ° ListIteratorλ μλ°©ν₯μΌλ‘ μ΄λμ΄ κ°λ₯νλ€.
λ€λ§ ArrayListλ LinkedList μ κ°μ΄ List μΈν°νμ΄μ€λ₯Ό ꡬνν 컬λ μ μμλ§ μ¬μ©ν μ μλ€.
-> Iteratorλ λ¨λ°©ν₯μΌλ‘λ§ μ΄λνκΈ° λλ¬Έμ 컬λ μ μ λ§μ§λ§ μμμ λ€λ€λ₯΄λ©΄ λ μ΄μ μ¬μ©ν μ μμ§λ§, ListIteratorλ μλ°©ν₯μΌλ‘ μ΄λνκΈ° λλ¬Έμ κ° μμκ°μ μ΄λμ΄ μμ λ‘λ€.
λ€λ§ μ΄λνκΈ° μ μ λ°λμ hasNext()λ hasPrevious()λ₯Ό νΈμΆν΄μ μ΄λν μ μλμ§ νμΈν΄μΌ νλ€.
-> Iteratorμ remove()λ λ¨λ μΌλ‘ μ°μΌ μ μκ³ , next()μ κ°μ΄ μ¨μΌνλ€.
νΉμ μμΉμ μμλ₯Ό μμ νλ κ²μ΄ μλλΌ μ½μ΄ μ¨ κ²μ μμ νλ€. next() νΈμΆμμ΄ remove()λ₯Ό νΈμΆνλ©΄ IllegalStateExceptionμ΄ λ°μνλ€.
3οΈβ£ Arrays
Arrays ν΄λμ€μλ λ°°μ΄μ λ€λ£¨λλ° μ μ©ν λ©μλ(static)κ° μ μλμ΄ μλ€.
- λ°°μ΄μ λ³΅μ¬ copyOf(), copyOfRange()
copyOf()λ λ°°μ΄ μ 체λ₯Ό, copyOfRange()λ λ°°μ΄μ μΌλΆλ₯Ό 볡μ¬ν΄μ μλ‘μ΄ λ°°μ΄μ λ§λ€μ΄μ λ°ννλ€.
- λ°°μ΄ μ±μ°κΈ° fill(), setAll()
fill()μ λ°°μ΄μ λͺ¨λ μμλ₯Ό μ§μ λ κ°μΌλ‘ μ±μ΄λ€.
setAll()μ λ°°μ΄μ μ±μ°λλ° μ¬μ©ν ν¨μν μΈν°νμ΄μ€λ₯Ό 맀κ°λ³μλ‘ λ°λλ€.
- λ°°μ΄μ μ λ ¬κ³Ό κ²μ sort(), binarySearch()
sort()λ λ°°μ΄μ μ λ ¬ν λ, κ·Έλ¦¬κ³ λ°°μ΄μ μ μ₯λ μμλ₯Ό κ²μν λλ binarySearch()λ₯Ό μ¬μ©νλ€.
binarySearch()λ λ°°μ΄μμ μ§μ λ κ°μ΄ μ μ₯λ μμΉλ₯Ό μ°Ύμμ λ°ννλλ° λ°λμ λ°°μ΄μ΄ μ λ ¬λ μνμ΄μ΄μΌ μ¬λ°λ₯Έ κ²°κ³Όλ₯Ό μ»λλ€.
λ°°μ΄μ 첫λ²μ§Έ μμλΆν° μμλλ‘ νλμ© κ²μνλ κ²μ 'μμ°¨ κ²μ(linear search)' λΌκ³ νλλ°, μ΄ κ²μ λ°©λ²μ λ°°μ΄μ΄ μ λ ¬λμ΄ μμ νμλ μμ§λ§ λ°°μ΄μ μμλ₯Ό νλνλ λΉκ΅νκΈ° λλ¬Έμ μκ°μ΄ λ§μ΄ κ±Έλ¦°λ€.
μ΄μ§νμ(binarysearch)λ λ°°μ΄μ κ²μν λ²μλ₯Ό λ°λ³΅μ μΌλ‘ μ λ°μ© μ€μ¬κ°λ©΄μ κ²μνκΈ° λλ¬Έμ κ²μ μλκ° μλΉν λΉ λ₯΄λ€.
λ°°μ΄μ κΈΈμ΄κ° 10λ°° λμ΄λλ κ²μ νμλ 3~4νλ°μ λμ΄λμ§ μκΈ° λλ¬Έμ ν° λ°°μ΄μ κ²μμ μ 리νλ€.
λ¨, λ°°μ΄μ΄ μ λ ¬λμ΄ μλ κ²½μ°μλ§ μ¬μ©ν μ μλ€λ λ¨μ μ΄ μλ€.
- λ°°μ΄μ λΉκ΅μ μΆλ ₯ equals(), toString()
toString()λ°°μ΄μ λͺ¨λ μμλ₯Ό λ¬Έμμ΄λ‘ νΈνκ² μΆλ ₯ν μ μλ€.
toString()μ μΌμ°¨μ λ°°μ΄μλ§ μ¬μ©ν μ μμΌλ―λ‘, λ€μ°¨μ λ°°μ΄μλ deepToString()μ μ¬μ©ν΄μΌνλ€.
equals()λ λ λ°°μ΄μ μ μ₯λ λͺ¨λ μμλ₯Ό λΉκ΅ν΄μ κ°μΌλ©΄ true, λ€λ₯΄λ©΄ falseλ₯Ό λ°ννλ€.
equals()λ μΌμ°¨μ λ°°μ΄μλ§ μ¬μ©κ°μ©νλ―λ‘ λ€μ°¨μ λ°°μ΄μ λΉκ΅μλ deepToEquals()λ₯Ό μ¬μ©ν΄μΌνλ€.
- λ°°μ΄μ Listλ‘ λ³ν asList(Object ..a)
asList()λ λ°°μ΄μ Listμ λ΄μμ λ°ννλ€. 맀κ°λ³μμ νμ μ΄ κ°λ³μΈμλΌμ λ°°μ΄ μμ±μμ΄ μ μ₯ν μμλ€λ§ λμ΄νλ κ²λ κ°λ₯νλ€.
-> asList()λ λ°νν List ν¬κΈ°λ₯Ό λ³κ²½ν μ μλ€λ κ²μ΄λ€. μ¦ μΆκ° λλ μμ κ° λΆκ°λ₯νλ€.
- paralleXXX, splitIterator(), stream()
parallelλ‘ μμνλ λ©μλλ€μ΄ μλλ° μ΄ λ©μλλ€μ λ³΄λ€ λΉ λ₯Έ κ²°κ³Όλ₯Ό μ»κΈ° μν΄μ μ¬λ¬ μ°λ λκ° νλμ μμ μ λλμ΄ μ²λ¦¬νλλ‘ νλ€.
splitIterator()λ μ¬λ¬ μ°λ λκ° μ²λ¦¬ν μ μκ² νλμ μμ μ μ¬λ¬ μμ μΌλ‘ λλλ SplitIteratorλ₯Ό λ°ννκ³ ,
Stream()μ 컬λ μ μ μ€νΈλ¦ΌμΌλ‘ λ³ννλ€.