class DDBoxDemo {
public static void main(String[] args) {
DBox<String, Integer> box1 = new DBox<>();
box1.set("Apple", 25);
DBox<String, Integer> box2 = new DBox<>();
box2.set("Orange", 33);
DDBox<DBox<String, Integer>, DBox<String, Integer>> ddbox = new DDBox<>();
ddbox.set(box1, box2);
System.out.println(ddbox);
}
}
/
Apple & 25
Orange & 33
/
class DBox<T1, T2> { private T1 ob1; private T2 ob2; public void set(T1 ob1, T2 ob2) { this.ob1 = ob1; this.ob2 = ob2; } @Override public String toString() { return ob1 + " & " + ob2; }}class DDBox<T1, T2> { private T1 ob1; private T2 ob2; public void set(T1 ob1, T2 ob2) { this.ob1 = ob1; this.ob2 = ob2; } @Override public String toString() { return ob1 + "\n" + ob2;}} public class DDBoxDemo { public static void main(String[] args) { DBox<String, Integer> box1 = new DBox<>(); box1.set("Apple", 25); DBox<String, Integer> box2 = new DBox<>(); box2.set("Orange", 33); DDBox<DBox<String, Integer>, DBox<String, Integer>> ddbox = new DDBox<>(); ddbox.set(box1, box2); System.out.println(ddbox); }}
public static void main(String[] args) {
Box box1 = new Box<>();
box1.set(99);
Box<Integer> box2 = new Box<>();
box2.set(55);
System.out.println(box1.get() + " & " + box2.get());
swapBox(box1, box2);
System.out.println(box1.get() + " & " + box2.get());
}
/
99 & 55
55 & 99
/
public static <T extends Number> void swapBox(Box<T> box1, Box<T> box2) { T temp; temp = box1.get(); box1.set(box2.get()); box2.set(temp); }}
class 뒤에 <T> 를 붙이면 클래스 전체 적용,
메소드 하나에만 적용하려면 public static <T> 형태
그것이 제네릭 메소드LinkedList는 추가 / 삭제 할때 빠르고(주소만 바꾸면 되서)
ArrayList는 느리다(새로 만들어서 for문을 새로 돌리기 때문)
ArrayList는 참조(조회)가 빠르고
LinkedList는 느리다(일일히 주소를 확인해야 하기 때문)
몇만건 수준에선 속도차이를 못느끼지만 몇억건부턴 차이가 느껴짐
toString을 오버라이드 하면 주소가 안나온다
제네릭
Box1<Apple> aBox = new Box1<Apple>();를
Box1<Apple> aBox = new Box1<>();로 써도 컴파일러가 자동입력
제네릭 문법 = 데이터 타입을 파라미터화 시킴
@Override
public String toString() {
return left + " & " + right;
Orange(객체)가 들어가면 toString을 거쳐서 문자열로 맞춰짐
<T extends Number> // 넘버를 상속하는 T
제네릭은 내가 쓰기보다 남의 코드를 이해하기 위한 것이라고 생각
셋/리/큐/맵
리스트, 맵을 가장 많이 씀 / 셋은 가끔 / 큐는 거의 안씀
리스트
util에 있는걸 import 해야함
배열은 반드시 처음에 용량을 정해야 한다
ArrayList는 배열과 달리 추가 작업을 알아서 해준다
LinkedList의 원리는 아래와 같다
class MyLinkedList{
int num;
MyLinkedList myLinkedList;}
MyLinkedList my1 = new MyLinkedList();
my1.num = 10;
MyLinkedList my2 = new MyLinkedList();
my1.num = 11;
my1.myLinkedList = my2;