Java3 - accidentlywoo/sec GitHub Wiki
- μ λ€λ¦ νλ‘κ·Έλλ°
- Collection Framework
- List μΈν°νμ΄μ€
- Set μΈν°νμ΄μ€
- Map μΈν°νμ΄μ€
μ λ€λ¦ νλ‘κ·Έλλ°μ 컬λ μ νλ μμν¬μ λ€ μ μ©μ΄ λμ΄μλ€.
λ³μμ μ μΈμ΄λ λ©μλμ 맀κ°λ³μλ₯Ό νλμ μ°Έμ‘° μλ£νμ΄ μλ μ¬λ¬ μλ£νμ λ³ν λ μ μλλ‘ νλ‘κ·Έλλ° νλ λ°©μ
μ€μ μ¬μ©λλ μ°Έμ‘° μλ£νμΌλ‘μ λ³νμ μ»΄νμΌλ¬κ° κ²μ¦νλ―λ‘ μμ μ μΈ νλ‘κ·Έλλ° λ°©μ
μ¬λ¬ μ°Έμ‘° μλ£νμΌλ‘ λ체 λ μ μλ λΆλΆμ νλμ λ¬Έμλ‘ νν
public class GenericPrinter<T>{ //GenericPrinter<T> : μ λ€λ¦ ν΄λμ€, T : typeμ μ½μ, μλ£ν 맀κ°λ³μ
private T material;
public void setMaterial (T material){
this.material = material;
}
public T getMaterial(){
return material;
}
}
T λμ μ μ¬μ©λ μλ£νμ μ ννκΈ° μν΄ μ¬μ©
Materialμ μ μλ λ©μλλ₯Ό 곡μ ν μ μμ
public class Point<T, V> {
T x;
V y;
Point(T x, V y){
this.x = x;
this.y = y;
}
public T getX(){// μ λ€λ¦ λ©μλ
return x;
}
public V getV(){// μ λ€λ¦ λ©μλ
return y;
}
}
λ©μλμ λ§€κ° λ³μλ₯Ό μλ£ν λ§€κ° λ³μλ‘ μ¬μ©νλ λ©μλ
public class GenericMethod {
public static <T, V> double makeRectangle(Point<T, V> p1, Point<T, V> p2){ // μ λ€λ¦ λ©μλ
double left = ((Number)p1.getX()).doubleValue();
double right = ((Number)p2.getX()).doubleValue();
double top = ((Number)p2.getY()).doubleValue();
double bottom = ((Number)p2.getY()).doubleValue();
double width = right - left;
double height = bottom - top;
return width * hight;
}
}
λ©μλ λ΄μμμ μλ£ν λ§€κ° λ³μλ λ©μλ λ΄μμλ§ μ ν¨ ν¨ (μ§μ λ³μμ κ°μ κ°λ )
class Shape<T>{
public static<T, V>double makeRectangle(Point<T, V> p1, Point<T, V> p2){
.....,
}
}
Shapeμ Tμ makeRectangleμ Tλ μ ν λ€λ₯Έ μλ―Έ
νλ‘κ·Έλ¨ κ΅¬νμ νμν μλ£κ΅¬μ‘°μ μκ³ λ¦¬μ¦μ ꡬνν΄ λμ λΌμ΄λΈλ¬λ¦¬
java.util ν¨ν€μ§μ ꡬνλμ΄ μμ
κ°λ°μ μμλλ μκ°μ μ μ½νκ³ μ΅μ νλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν μ μμ
Collection μΈν°νμ΄μ€μ Map μΈν°νμ΄μ€λ‘ ꡬμ±λ¨
- Array : λ Όλ¦¬ - μ°μ, 물리 - μ°μ : ArrayList, Vector
- LinkedList : λ Όλ¦¬ - μ°μ, 물리 - μ°μX : LinkedList
- Stack : LIFO, push(), pop()
- Queue : FIFO, front(dequeue()), rear(enqueue())
- Hash : κ²μμ μν μλ£κ΅¬μ‘°, hash(key) - μ°μ μ°μ°μ μ¬μ©ν΄ λΉ λ₯΄λ€. O(1) collision, λ°μ΄ν°μ 75%μ¬μ©μ, λ°μ΄ν° μ©λ μΆκ°λ¨
νλμ κ°μ²΄μ κ΄λ¦¬λ₯Ό μν΄ μ μΈλ μΈν°νμ΄μ€λ‘ νμν κΈ°λ³Έ λ©μλκ° μ μΈ λμ΄ νμμ List, Set μΈν°νμ΄μ€κ° μμ
μμΌλ‘ μ΄λ£¨μ΄μ§ κ°μ²΄λ₯Ό κ΄λ¦¬νλλ° νμν μ¬λ¬ λ©μλκ° μ μΈλμ΄ μμ
Mapμ μ¬μ©νλ κ°μ²΄λ key-value μμΌλ‘ λμ΄ μκ³ keyλ μ€λ³΅λ μ μμ
Collection νμ μΈν°νμ΄μ€
κ°μ²΄λ₯Ό μμμ λ°λΌ μ μ₯νκ³ κ΄λ¦¬νλλ° νμν λ©μλκ° μ μΈλ μΈν°νμ΄μ€
λ°°μ΄μ κΈ°λ₯μ ꡬννκΈ° μν λ©μλκ° μ μΈλ¨
ArrayList, Vector, LinkedList
κ°μ²΄ λ°°μ΄ ν΄λμ€
Vectorλ μλ° 2λΆν° μ 곡λ ν΄λμ€
μΌλ°μ μΌλ‘ ArrayListλ₯Ό λ λ§μ΄ μ¬μ©
Vecto λ λ©ν° μ°λ λ νλ‘κ·Έλ¨μμ λκΈ°νλ₯Ό μ§μ
λκΈ°ν(synchronization) : λ κ°μ μ°λ λκ° λμμ νλμ 리μμ€μ μ κ·Ό ν λ μμλ₯Ό λ§μΆμ΄μ λ°μ΄ν°μ μ€λ₯κ° λ°©μ§νμ§ μλλ‘ ν¨
capacityμ sizeλ λ€λ₯Έ μλ―Έμ
SetμΈν°νμ΄μ€λ μμλ₯Ό 보μ₯νμ§ μλλ€.
Iteratorλ‘ μννκΈ° Collectionμ κ°μ²΄λ₯Ό μννλ μΈν°νμ΄μ€
iterator() λ©μλ νΈμΆ
Iterator ir = memberArrayList.iterator();
Iterator μ μ μΈλ λ©μλ
- boolean hasNext() : μ΄νμ μμκ° λ μλμ§λ₯Ό 체ν¬νλ λ©μλμ΄λ©°, μμκ° μλ€λ©΄ trueλ₯Ό λ°ννλ€.
- E next() : λ€μμ μλ μμλ₯Ό λ°ννλ€.
Collection νμμ μΈν°νμ΄μ€ μ€λ³΅μ νμ©νμ§ μμ
Listλ μμκΈ°λ°μ μΈν°νμ΄μ€μ§λ§, Setμ μμκ° μμ
get(i) λ©μλκ° μ 곡λμ§ μμ (Iteratorλ‘ μν)
μ μ₯λ μμμ μΆλ ₯μμλ λ€λ₯Ό μ μμ
μμ΄λ, μ£Όλ―Όλ²νΈ, μ¬λ² λ± μ μΌν κ°μ΄λ κ°μ²΄λ₯Ό κ΄λ¦¬ν λ μ¬μ©
HashSet, TreeSet ν΄λμ€
Set μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€
μ€λ³΅μ νμ©νμ§ μμΌλ―λ‘ μ μ₯λλ κ°μ²΄μ λμΌν¨ μ¬λΆλ₯Ό μκΈ° μν΄ equals()μ hashCode() λ©μλλ₯Ό μ¬μ μ ν΄μΌ ν¨.
κ°μ²΄μ μ λ ¬μ μ¬μ©λλ ν΄λμ€
μ€λ³΅μ νμ©νμ§ μμΌλ©΄μ μ€λ¦μ°¨μμ΄λ λ΄λ¦Όμ°¨μμΌλ‘ κ°μ²΄λ₯Ό μ λ ¬ ν¨
λ΄λΆμ μΌλ‘ μ΄μ§ κ²μ νΈλ¦¬(binary search tree - redblack tree) λ‘ κ΅¬νλμ΄ μμ
μ΄μ§ κ²μ νΈλ¦¬μ μλ£κ° μ μ₯ λ λ λΉκ΅νμ¬ μ μ₯λ μμΉλ₯Ό μ ν¨
κ°μ²΄ λΉκ΅λ₯Ό μν΄ Comparableμ΄λ Comparator μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌ ν¨.
μ λ ¬ λμμ΄ λλ ν΄λμ€κ° ꡬνν΄μΌ νλ μΈν°νμ΄μ€
Comparable μ compareTo() λ©μλλ₯Ό ꡬν
맀κ°λ³μμ κ°μ²΄ μμ (this)λ₯Ό λΉκ΅
Comparatorλ compare() λ©μλλ₯Ό ꡬν
λ κ°μ λ§€κ° λ³μλ₯Ό λΉκ΅
TreeSet μμ±μμ Comparatorκ° κ΅¬νλ κ°μ²΄λ₯Ό 맀κ°λ³μλ‘ μ λ¬
TreeSet<Member> treeSet = new TreeSet<Member>(new Member());
μΌλ°μ μΌλ‘ Comparable μ λ λ§μ΄ μ¬μ©
μ΄λ―Έ Comparable μ΄ κ΅¬νλ κ²½μ° Comparatorλ₯Ό μ΄μ©νμ¬ λ€λ₯Έ μ λ ¬ λ°©μμ μ μν μ μμ
key-value pairμ κ°μ²΄λ₯Ό κ΄λ¦¬νλλ° νμν λ©μλκ° μ μ λ¨
keyλ μ€λ³΅ λ μ μμ
κ²μμ μν μλ£ κ΅¬μ‘°
keyλ₯Ό μ΄μ©νμ¬ κ°μ μ μ₯νκ±°λ κ²μ, μμ ν λ μ¬μ©νλ©΄ νΈλ¦¬ν¨
index = hash(ket) //indexλ μ μ₯ μμΉ
keyκ° λλ κ°μ²΄λ κ°μ²΄μ μ μΌμ±μ μ¬λΆλ₯Ό μκΈ° μν΄ equals()μ hashCode()λ©μλλ₯Ό μ¬μ μ ν¨
Map μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€ μ€ κ°μ₯ μΌλ°μ μΌλ‘ μ¬μ©νλ ν΄λμ€ HashTable ν΄λμ€λ μλ°2λΆν° μ 곡λ ν΄λμ€λ‘ Vectorμ²λΌ λκΈ°νλ₯Ό μ 곡 ν¨ pairμλ£λ₯Ό μ½κ³ λΉ λ₯΄κ² κ΄λ¦¬ν μ μμ
key κ°μ²΄λ₯Ό μ λ ¬νμ¬ key-valueλ₯Ό pairλ‘ κ΄λ¦¬νλ ν΄λμ€
keyμ μ¬μ©λλ ν΄λμ€μ Comparable, Comparator μΈν°νμ΄μ€λ₯Ό ꡬνν javaμ λ§μ ν΄λμ€λ€μ μ΄λ―Έ Comparableμ΄ κ΅¬νλμ΄ μμ
ꡬνλ ν΄λμ€λ₯Ό keyλ‘ μ¬μ©νλ κ²½μ°λ ꡬνν νμ μμ
public final class Integer extends Number implements Comparable<Integer>{
...
public int compareTo(Integer anotherInteger){
return compare(this.value, anotherInteger.value);
}
}
νλμ κ°μ²΄μ κ΄λ¦¬λ₯Ό μν΄ μ μΈλ μΈν°νμ΄μ€λ‘ νμν κΈ°λ³Έ λ©μλκ° μ μΈλμ΄ μμ νμμ List, Set μΈν°νμ΄μ€κ° μμ
-
List μΈν°νμ΄μ€ : μμκ° μλ μλ£ κ΄λ¦¬, μ€λ³΅ νμ©. μ΄ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ ArrayList, Vector, LinkedList, Stack, Queueλ±μ΄ μμ
-
Set μΈν°νμ΄μ€ : μμκ° μ ν΄μ Έ μμ§ μμ, μ€λ³΅μ νμ©νμ§ μμ. μ΄ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ HashSet, TreeSet λ±μ΄ μμ
μμΌλ‘ μ΄λ£¨μ΄μ§ κ°μ²΄λ₯Ό κ΄λ¦¬νλλ° νμν μ¬λ¬ λ©μλκ° μ μΈλμ΄ μμ
Mapμ μ¬μ©νλ κ°μ²΄μ key-value μμΌλ‘ λμ΄ μκ³ keyλ μ€λ³΅λ μ μμ
Map : Hashtable ( - Properties), HashMap, TreeMap