hyeonga_code
Java_66_Collection_Set, List, Queue, Map 본문
-- 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;
default: System.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 |