24일차 강의 정리


1. 메소드 제네릭

소스1 (Number 상속받는 메소드 제네릭)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Box01<T>{        //내가정한 타입이 들어온다(제네릭)
    T obj;
 
    void setObj(T obj){
        this.obj = obj;
    }
    T getObj(){
        return this.obj;
    }
}
 
//아래클래스를 숫자에 한정하여 제네릭을 제한하여 사용
//(Box01<String> box = Template.<String>getMethod("s"); 불가! String은 Number에 상속받지않기때문)
class Template{     //^아래<>가 메소드 제네릭위치(리턴타입의 앞)
    public static <extends Number> Box01<T> getMethod(T a){        //메소드에 제네릭(Number 상속)
        Box01<T> box = new Box01<T>();
        box.setObj(a);
        return box;
    }
}
public class Ex01 {
    public static void main(String[] args) {
 
        Box01<Integer> box = Template.<Integer>getMethod(1000);        //*이것이 중요
        System.out.println(box.getObj());        
 
    }
}
cs

결과1

소스2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Box01<T>{        //내가정한 타입이 들어온다(제네릭)
    T obj;
 
    void setObj(T obj){
        this.obj = obj;
    }
    T getObj(){
        return this.obj;
    }
}
 
class Template{     //^아래<>가 메소드 제네릭위치(리턴타입의 앞)
    public static <extends CharSequence> Box01<T> getMethod(T a){            //메소드에 제네릭2
        Box01<T> box = new Box01<T>();
        box.setObj(a);
        return box;
    }
}
public class Ex01 {
    public static void main(String[] args) {
        
        Box01<StringBuffer> box = Template.<StringBuffer>getMethod(new StringBuffer("1000"));        //*이것이 중요
        System.out.println(box.getObj());
        
    }
}
cs

결과2

2. 와일드카드

형식 : <extends Number>

Number자리가 class가아닌 Interface 이더라도 extends를 사용한다.

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Box02<T>{        //내가정한 타입이 들어온다(제네릭)
    T obj;
 
    void setObj(T obj){
        this.obj = obj;
    }
    T getObj(){
        return this.obj;
    }
}
 
public class Ex02 {
    public static void main(String[] args) {
        
        Box01<?> box = new Box01<Integer>();        //?는 와일드카드
        box = new Box01<String>();
        box = new Box01<Double>();
        
        Box01<extends Number> box1 = new Box01<Integer>();        //?는 와일드카드
        box1 = new Box01<Double>();
//        box3 = new Box01<String>();    //오류
        
        Box01<super Integer> box2 = new Box01<Integer>();        //?는 와일드카드
        box2 = new Box01<Number>();            //상위클래스만 가능
        box2 = new Box01<Object>();
 
    }
}
cs

결과가 없는 소스로 

어떠한 형식으로 사용이 되는지 확인만 하는 소스이다.


'* Programming > JAVA' 카테고리의 다른 글

DAY25 스레드 스케줄링&동기화  (0) 2016.08.08
DAY24 스레드  (0) 2016.08.08
DAY23 제네릭1  (0) 2016.08.08
DAY22 큐&스택  (0) 2016.08.04
DAY22 컬렉션프레임워크 Map  (0) 2016.08.03

23일차 강의 정리


컬렉션프레임워크

소스1 (* ArrayList, HashSet, TreeSet)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class Ex01 {
    public static void main(String[] args) {        
        ArrayList<Integer> list = new ArrayList<Integer>();    //제네릭<>
        list.add(new Integer(1));
        list.add(new Integer(2));
        list.add(new Integer(3));
//        list.add("사");    //Integer 외에 오류
        
//        for (int i = 0; i < list.size(); i++) {
//            Integer temp = list.get(i);
//            System.out.println(temp);
//        }
        for(Integer i:list){    //foreach문, 개선된 for문
            System.out.println(i);
        }
        System.out.println("------------------------------");
        int[][] arr={{1,2},{3,4},{5,6},{7,8,9}};
        for(int[] i :arr){
            for(int j : i){
            System.out.print(j+" ");
            }
            System.out.println();
        }
        
        System.out.println("------------------------------");
//        HashSet<String> set = new HashSet<String>();        //정렬이없는 Set
        TreeSet<String> set = new TreeSet<String>();        //정렬 Set
        //tree는 제네릭이없을경우 다른타입이 존재할시 오류(순서를 정할수없어서)
        set.add("하나");
        set.add("둘");
//        set.add(3);        //오류
        set.add("넷");
        
//        Iterator ite = set.iterator();
//        while(ite.hasNext()){
//            System.out.println(ite.next());
//        }
        for(String temp : set){        //foreach문
            System.out.println(temp);
        }
        
    }//main end
}//class end
cs

결과1

소스2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Box02<T>{
    T obj;
 
    void add(T obj){
        this.obj = obj;
    }
 
    T get(){
        return obj;
    }
}
class Paper{
    @Override
    public String toString() {
        return "종이입니다.";
    }
}
class Pen{
    @Override
    public String toString(){
        return "나는 펜입니다.";
    }
}
 
public class Ex02 {
    public static void main(String[] args) {
        Box02<Pen> box = new Box02<Pen>();        
        Pen pen = new Pen();
        box.add(pen);
        System.out.println(box.get());
 
        Box02<Paper> box2 = new Box02<Paper>();
        Paper per = new Paper();
        box2.add(per);
        System.out.println(box2.get());        
    }//main end
}//class end
cs

결과2

소스3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Ex03 {
    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<String,String>();
        map.put("하나""a");
        map.put("둘""abcd");
        map.put("셋""123456");
        map.put("넷""1234");
//        Set<String> key = map.keySet();
        TreeSet<String> key = new TreeSet(map.keySet());
        Iterator<String> ite = key.iterator();
        String obj = ite.next();
//        while(ite.hasNext()){                    //무한루프
//            System.out.println(map.get(obj));    //값
//            System.out.println(obj);            //key값
//        }
        Set<String> set = map.keySet();
        for(String key2 : set){
            System.out.println(key2+":"+map.get(key2));
        }
 
    }//main end
}//class end
cs

결과3

소스4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Box04<T,M>{
    T pen;
    M par;
    
    void set(T pen, M par){
        this.pen=pen;
        this.par=par;
    }
    T getPen(){
        return this.pen;
    }
    M getPar(){
        return this.par;
    }
}
class Pen04{}
class Paper04{}
 
public class Ex04 {
    public static void main(String[] args) {
//        Box04<Pen04,Paper04> box = new Box04<Pen04,Paper04>();
//        box.set(new Pen04(), new Paper04());
        
        Box04<String,Integer> box = new Box04<String,Integer>();
        box.set("aaaaaaaaaa"1234);
        System.out.println(box.getPen());
        System.out.println(box.getPar());
    }//main end
}//class end
cs

결과4



'* Programming > JAVA' 카테고리의 다른 글

DAY24 스레드  (0) 2016.08.08
DAY24 제네릭2(메소드제네릭,와일드카드)  (0) 2016.08.08
DAY22 큐&스택  (0) 2016.08.04
DAY22 컬렉션프레임워크 Map  (0) 2016.08.03
DAY22 컬렉션프레임워크 Set  (0) 2016.08.03

22일차 강의 정리


1. 큐(Queue)

선입선출(FIFO: First in First out) - interface

2. 스택(Stack)

후입선출(LIFO: Last in First out) - class


소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    public static void main(String[] args) {
        Queue que = new LinkedList();
        que.offer("첫째");    //마지막 요소로 추가
        que.offer("둘째");
        que.offer("셋째");
        que.offer("넷째");
        
        while(que.isEmpty()==false){
            System.out.println(que.poll());    //첫번째 값 꺼내오기
//            System.out.println(que.peek());    //꺼내지 않고 확인만
        }
        System.out.println("-------------------------------");
 
        Stack st =  new Stack();
        st.push("하나");
        st.push("두울");
        st.push("세엣");
        st.push("네엣");
        
        while(st.isEmpty()==false){
            System.out.println(st.pop());    //마지막부터 꺼내오기
//            System.out.println(st.peek());    //꺼내지 않고 확인만
        }
    }
cs

결과



22일차 강의 정리


1. Map

Map은 값을 배열형식으로 인덱스와 값이 들어가는 것이 아니라,

key값과 value값을 지정하여 put하는 것이다.

대표적으로 HashMap을 사용한 소스이다.

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static void main(String[] args) {
        HashMap map = new HashMap();
        
        map.put("aa",123);
        map.put("bb",456);
        map.put("cc",789);
        map.put("dd",000);
        map.put("aa",12344);
        
        map.remove("dd");        //"dd"키의 값 삭제
        
        Set key = map.keySet();        //key 값 가져오기
        Iterator ite= key.iterator();
        while(ite.hasNext()){
            System.out.println(map.get((String)ite.next()));
        }
    }//main end
cs

결과

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Ex02 {
 
    public static void main(String[] args) {
        //Map use
        ArrayList list = new ArrayList();
        HashMap map = new HashMap();
        map.put("kor"90);
        map.put("eng"80);
        map.put("math"70);
        list.add(map);
        
        for (int i = 0; i < list.size(); i++) {
            HashMap map2 = (HashMap)list.get(i);
            System.out.println(map2.get("kor")+""+map2.get("math"));
        }
    }
 
}
cs

결과


* 지금까지의 컬렉션 프레임워크는 제네릭이 제외되어 경고 (!)가 표기되어있다..

다음 강의에서 제네릭이 포함된 컬렉션프레임워크를 다룰예정이다.

'* Programming > JAVA' 카테고리의 다른 글

DAY23 제네릭1  (0) 2016.08.08
DAY22 큐&스택  (0) 2016.08.04
DAY22 컬렉션프레임워크 Set  (0) 2016.08.03
DAY22 컬렉션프레임워크 ArrayList&LinkedList  (0) 2016.08.03
DAY22 컬렉션프레임워크 Vector  (0) 2016.08.03

22일차 강의 정리


set type은 중복이 불가능하다.

우선 해시값을 비교해서 중복이 아님을 확인해 제외시킨다. 

그러나 해시값이 같을 경우 equals검사 수행해서 중복을 확인한다.

1. HashSet

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public static void main(String[] args) {
        HashSet set = new HashSet();
        set.add("하나");
        set.add("둘");
        set.add("셋");
        set.add("넷");
        set.add(new String("넷"));        //중복x
        
        HashSet set2 = new HashSet(set);    //set을 set2에 모두 복사
        HashSet set3 = (HashSet)set2.clone();    //복사,그러나 clone이 받아오는 타입을몰라서 (HachSet)로 캐스팅
        
        Iterator ite = set3.iterator();
        while(ite.hasNext()){
            System.out.println(ite.next());
//            ite.remove();    //삭제
        }
        System.out.println("------------------------------");
        System.out.println("size: "+set3.size());
        System.out.println("\'하나\'란 값이 있는가? "+set3.contains("하나"));
        System.out.println("하나".equals(new String("하나")));    //==는 비교불가
        System.out.println(new String("하나").hashCode());
        System.out.println("하나".hashCode());
    }//main end
cs

결과

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Pm05{
    int idx;
    
    Pm05(int idx){
        this.idx=idx;
    }
    
    public boolean equals(Object obj){
        return idx==((Pm05)obj).idx;
    }
    
    public int hashCode(){
        return 1000;
    }
}
 
public class Ex05 {
    public static void main(String[] args) {
        HashSet set = new HashSet();
        Pm05 pm1 = new Pm05(1);
        Pm05 pm2 = new Pm05(2);
        Pm05 pm3 = new Pm05(1);
        set.add(pm1);
        set.add(pm2);
        set.add(pm3);
        
        Iterator ite = set.iterator();
        while(ite.hasNext()){
            System.out.println(ite.next());
        }
        System.out.println("size: "+set.size());
    }//main end
}//class end
cs

중복되는것을 확인해서 제외시켜서 size가 2이다.

결과

응용소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Ball{
        int num;
        
        Ball(int num){
            this.num=num;
        }
        @Override
        public boolean equals(Object obj){
            return num==((Ball)obj).num;
        }
        @Override
        public int hashCode(){
            return num;
        }
    }
 
public class Ex06 {
    public static void main(String[] args) {
        //lotto
        HashSet set = new HashSet();
        int cnt = 0;
        while(set.size()<7){
            cnt++;
            Random ran = new Random();
            int random = ran.nextInt(45)+1;
            set.add(new Ball(random));
        }
        System.out.println(cnt-6+"번 중복");
        Iterator ite = set.iterator();
        while(ite.hasNext()){
            Ball ball = (Ball)ite.next();
            System.out.print(ball.num+" ");
        }
        
    }//main end
}//class end
cs

결과1                                결과2


2. TreeSet

TreeSet은 위의 HashSet과 달리 Tree형식으로 순서가 존재한다.

그래서 순서를 정할수 없는 상황(ex. 문자와 숫자가 혼용)이 된다면 오류가 발생한다.

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Pm07 implements Comparable{
    int idx;
    Pm07(int idx){
        this.idx=idx;
    }
    @Override    // 트리구조의 정렬 
    public int compareTo(Object o) {
        if(idx==((Pm07)o).idx){
            return 0;
        }
        if(idx<((Pm07)o).idx){
            return -1;
        }
        return 1;
    }
}
 
public class Ex07 {
 
    public static void main(String[] args) {
        TreeSet set = new TreeSet();
        set.add(new Pm07(1));
        set.add(new Pm07(50));
        set.add(new Pm07(5));
        set.add(new Pm07(25));
        
        Iterator ite = set.iterator();
        while(ite.hasNext()){
            System.out.println(((Pm07)ite.next()).idx);
        }
        System.out.println("----------------------");
//        System.out.println(set.first());
//        System.out.println(set.last());
//        System.out.println(set.lower(new Integer(10)));
//        System.out.println(set.higher(10));
    }
 
}
cs

결과


'* Programming > JAVA' 카테고리의 다른 글

DAY22 큐&스택  (0) 2016.08.04
DAY22 컬렉션프레임워크 Map  (0) 2016.08.03
DAY22 컬렉션프레임워크 ArrayList&LinkedList  (0) 2016.08.03
DAY22 컬렉션프레임워크 Vector  (0) 2016.08.03
DAY21 컬렉션 프레임워크  (0) 2016.08.03

+ Recent posts