hyeonga_code

Java_66_Collection_Set, List, Queue, Map 본문

Java

Java_66_Collection_Set, List, Queue, Map

hyeonga 2023. 10. 26. 07:59
반응형


    -- Set
        - class
            - HashSet
            - TreeSet
        - 크기가 정해지지 않음
        - 순서 없음
        > 동일 데이터 허용하지 않음 > 중복 삭제
        Iterator it = hs.iterator() > Java 1.2
            - 데이터 정렬_기준을 모름
            it.hs.hasNext() > 정렬된 것을 하나씩 반환
        Enumeration > Java 1.3
    -- List
        - class
            - ArrayList
                - 삽입 가능
                - 빈칸이 없어야 하므로 성능이 좋지는 않음
            - Vector
            - Stack
                - 선입후출_FILO/LIFO
        - 크기가 정해지지 않음
        - 중간에 빈 공간이 없음
        - 스레드의 동기화
            - Vector 지원
                > 조금 더 무거움
            - ArrayList 지원하지 않음
        - 순서 있음
            > 동일 데이터 허용 > 중복 가능
    -- Queue
        - class
            - LinkedList
        - 선입선출_FIFO
    -- Map
        - class
            - HashMap
            - HashTable
        - 크기가 정해지지 않음
        - 키 지정 가능 > 인덱스 기능
            - 키/값 모두 객체여야 함
        - 값을 제거하지 않아도 다른 값 확인 가능
        Set s = hm.keySet();
            - 키 값만 추출 가능
            - 순서 있음 

-- Generic
------------------------------------------------------------------------------------
 - 실무

 - 배열의 장점
          - 같은 타입의 데이터를 그룹으로 관리할 수 있습니다.
          - '배열 이름'.length : 배열의 크기가 저장된 변수입니다.
 - 배열의 단점
    - 사이즈가 고정되어 있습니다.
                    - 확장이 불가능합니다.
          - CRUD 관련 메소드 기능을 제공하지 않습니다.

 - Collection_자료구조   
    - 배열과 같이 다량의 데이터를 관리합니다.
          - 가변 크기
          - CRUD 관련 메소드 기능을 제공합니다.
                    - TreeSet
                    - Queue
                              - 선입선출
                              - FIFO_First In First Out
                              - 알고리즘에 많이 사용합니다.
                       - Set
                              - 중복을 허용하지 않습니다.
                              - 순서를 정의하지 못합니다.
                              - 데이터를 삽입할 때에 안에 저장된 데이터를 비교해야 합니다.
                              - 종류
                                        - HashSet
                                                  .add(); _ 데이터 삽입
                                                  .clear(); _ 데이터 삭제
                                                  .isEmpty(); _ Set이 비어있는지
                                                  .contains(); _ 데이터의 포함 여부
                                                  .hasNext();          _ 현재 데이터가 존재하는지
                                                  .iterator(); _ 데이터를 꺼내오는 것
                                                  .remove('지정 데이터'); _ 지정 데이터 삭제
=====

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
=====
import java.util.*;
 
public class ex0325 {
    public static void main(String[] args) {
        HashSet set = new HashSet();
        
        set.add("data 1");
        set.add("data 2");
        set.add("data 3");
        set.add("data 4");
        set.add("data 5");
        set.add("data 6");
        
        set.add("data 6");    // 중복된 데이터는 덮어씀
        
        System.out.println(set);    // [data 6, data 1, data 3, data 2, data 5, data 4]
        // 순서 랜덤
 
        System.out.println("set size : " + set.size());    // set size : 6
 
        if (set.contains("data 1")) {
            System.out.println("Data 1 is in set");    // Data 1 is in set
        }
        else {
            System.out.println("No Data 1");
        }
 
        /*
        String[] name = new String[set.size()];
        set.toArray(name);
        for (int i = 0; i < name.length; i++) {
            System.out.println(name[i]);
        }
           >>> 잘 사용하지 않음
        */
 
        Iterator it = set.iterator();    // 데이터를 꺼내오는 것
        while (it.hasNext()) {
            // 현재 데이터가 존재하는지
            Object obj = it.next();    // 업 캐스팅 : 어떤 값이 있을 지 모르니 무조건 object
            String name = (String)obj;    // 다운 캐스팅 : 필요한 값은 string
            System.out.println(name);
        }
 
        set.remove("data 6");    // 지정 데이터 삭제
        System.out.println(set);    // [data 1, data 3, data 2, data 5, data 4]
 
        set.clear();    // 데이터 삭제
        System.out.println("set size : " + set.size());    // set size : 0
 
        if (set.isEmpty()) {
            System.out.println("No Data");    // No Data
        }
        else {
            System.out.println("Data");
        }
    }
}
 






 - 패키지로 작업하기
           1. Package 생성
           2. Package에 class 생성
 <Member>  >  'Member'
=====

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
44
45
46
47
48
49
50
51
52
53
package Member;
 
public class Member {
    // 정보 저장
    private String name;    // 이름 변수 선언
    private String tel;        // 전화번호 변수 선언
    private String addr;    // 주소 변수 선언
    
    public Member(String name, String tel, String addr) {
        // Member() 함수 생성
        this.name = name;
        // 입력 받은 이름을 이름 변수에 저장
        this.tel = tel;
        // 입력 받은 전화번호를 전화번호 변수에 저장
        this.addr = addr;
        // 입력 받은 주소를 주소 변수에 저장
    }
 
    public String getTel() {
        // 전화번호를 불러오는 함수 생성
        return tel;
        // 전화번호 값을 반환
    }
 
    public void setTel(String tel) {
        // 전화번호 수정하는 함수 생성
        this.tel = tel;
        // 입력 받은 전화번호를 전화번호 변수에 저장
    }
 
    public String getAddr() {
        // 주소를 불러오는 함수 생성
        return addr;
        // 주소값을 반환
    }
 
    public void setAddr(String addr) {
        // 주소를 수정하는 함수 생성
        this.addr = addr;
        // 입력받은 주소를 주소 변수에 저장
    }
 
    public String getName() {
        // 이름을 불러오는 함수 생성
        return name;
        // 이름 값을 반환
    }
    public void disp() {
        // 출력하는 함수 생성
        System.out.println(name+"님의 전화번호는 " + tel 
                +"번이고, 주소는 " + addr+"입니다.");
    }
}
cs




 - 인터페이스 설계
<Member> > 'MemberPro'
=====

1
2
3
4
5
6
7
8
9
10
package Member;
 
public interface MemberPro {
    // 인터페이스 요약 설계
    public void input();
    public void view();
    public void edit();
    public void delete();
    public void exit();
}




 - 설계한 인터페이스를 상속받아 구현
<Member> > 'MemberProImpl'
=====

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package Member;
import java.util.*;
 
public class MemberProImpl implements MemberPro {
    // 인터페이스 구현 
    private Scanner in;
    private HashSet set;
    
    public MemberProImpl() {
        // 구현하는 함수를 생성
        in = new Scanner(System.in);
        set = new HashSet();
        // set 생성
    }
    
    @Override    
    public void input() {
        // 입력 받는 함수 오버라이드
        System.out.print("이름을 입력 : ");
        String name = in.next();
        System.out.print("전화번호를 입력 : ");
        String tel = in.next();
        System.out.print("주소를 입력 : ");
        String addr = in.next();
        Member mb = new Member(name, tel, addr);
        // Member 함수를 호출하여 mb에 변수 값 저장
        set.add(mb);
        // set에 추가
    }
 
    @Override
    public void view() {
        // 출력 함수 생성
        Iterator it = set.iterator();
        // 데이터를 불러올 생성자 선언
        while(it.hasNext()) {
            // 데이터가 존재하는 동안 반복
            Object obj = it.next();
            Member mb = (Member)obj;
            mb.disp();
        }
    }
    
    public Member isName(String name) {
        // 입력한 이름을 확인
        Iterator it = set.iterator();
        // 데이터를 꺼내올 생성자 선언
        
        while(it.hasNext()) {
            // 데이터가 존재하는 동안 반복
            Object obj = it.next();
            Member mb = (Member)obj;
            if (mb.getName().equals(name)) {
                // mb에 저장되어 불러온 이름과 입력한 값이 같다면
                return mb;
                // mb 값을 반환
            }
        }
        return null;
    }
 
    @Override
    public void edit() {
        System.out.print("수정할 회원의 이름 : ");
        String name = in.next();
        Member mb = isName(name);
        // isName함수로 입력받은 이름 정보 가져옴
        if (mb == null) {
            // set에 데이터가 없다면
            System.out.println(name+"님은 저희 회원이 아닙니다.");
        }else {
            // 데이터가 있을 경우
            System.out.println("현재 "+name+"님의 전화번호는 " + mb.getTel()+"번입니다.");
            System.out.print("수정하실 전화번호 : ");
            mb.setTel(in.next());
            System.out.println("현재 "+name+"님의 주소는 " + mb.getAddr()+"번입니다.");
            System.out.print("수정하실 주소 : ");
            mb.setAddr(in.next());
            System.out.println(name+"님의 정보를 수정하였습니다.");
        }
    }
 
    @Override
    public void delete() {
        System.out.print("삭제할 회원의 이름 : ");
        String name = in.next();
        Member mb = isName(name);
        // isName함수로 입력받은 이름 정보 가져옴
        if (mb == null) {
            // set에 데이터가 없다면
            System.out.println(name+"님은 저희 회원이 아닙니다.");
        }else {
            // 데이터가 있을 경우
            System.out.println(name+"님을 삭제합니다.");
            set.remove(mb);
        }
    }
 
    @Override
    public void exit() {
        // 프로그램 종료하는 함수 생성
        System.out.println("프로그램을 종료합니다.");
        System.exit(0);
    }
}




<Member> > 'MemberMain'
=====

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
package Member;
import java.io.*;
 
public class MemberMain {
    public static void main(String[] args) throws IOException {
        MemberPro pro = new MemberProImpl();
 
        while (true) {
            // 무한반복
            System.out.print("1.입력 2.출력 3.수정 4.삭제 5.종료 : ");
            int select = System.in.read() - 48;
            System.in.skip(5);
 
            switch (select) {
                // 작업 
            case 1: pro.input(); break;
            case 2: pro.view(); break;
            case 3: pro.edit(); break;
            case 4: pro.delete(); break;
            case 5: pro.exit(); break;
            defaultSystem.out.println("잘못입력하셨습니다.");
            }
        }
    }
}

 

반응형

'Java' 카테고리의 다른 글

Java_68_Collection_List  (0) 2023.10.27
Java_67_Collection_Map  (0) 2023.10.27
Java_65_Generic_제네릭  (0) 2023.10.26
Java_64_Stream_Byte 입출력  (0) 2023.10.26
Java_63_Scanner  (0) 2023.10.25