* Java Collection Framework(JCF)
: 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것
* Collection
- List : 순서가 존재, 중복 가능
- Set : 순서가 X, 중복 X
- Map : key <==> value 매핑, key는 유니크한 값, value : 중복 가능
[ List ]
> ArrayList : 비동기화, java에서 벡터보다 속도가 빠름, Object에 담고 한계가 없음
> Vector : 동기화, 성장형 Object 배열을 구현해놓은 클래스로 데이터 크기 증가가능, 기본적으로 비어있는 10칸짜리
> Stack : 선입후출(First-In Last-Out), 후입선출(Last-In First-Out), 담긴 데이터를 꺼내면(pop) 사라짐
--> 가장 많이 사용하는 건 ArrayList! (Vector와 ArrayList는 비슷하지만 ArrayList가 더 빨라서 많이 쓰임)
* ArrayList : add, size, get
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
|
package day16;
import java.util.ArrayList;
public class ArrayListEx1 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("딸기");
list.add("포도");
list.add("귤");
list.add("사과");
list.add("바나나");
list.add("배");
list.add("키위");
System.out.println("list : "+list);
System.out.println("총 데이터 수 : "+list.size());
list.add("딸기");
list.add("딸기");
list.add("딸기");
list.add("딸기");
list.add("딸기");
list.add("딸기");
list.add("딸기");
list.add("딸기");
System.out.println("list : "+list);
System.out.println("총 데이터 수 : "+list.size());
// 데이터 찾기
boolean flag = list.contains("수박");
System.out.println("수박이 있니? "+flag);
list.add("수박");
flag = list.contains("수박");
System.out.println("수박이 있니? "+flag);
// ArrayList 안에 있는 모든 요소를 화면에 출력
for(int i = 0; i<list.size(); i++) {
System.out.println(list.get(i));
}
// Vector와 ArrayList는 비슷..
// >> ArrayList가 더 빠르기 때문에 ArrayList 쓰는 게 더 좋음!
}
}
|
cs |
* Vector : add, capacity, size, get
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
|
package day16;
import java.util.Vector;
// Java Collection Framework(JCF)
// 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
// 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것
public class VectorEx1 {
public static void main(String[] args) {
int[] m = new int[3];
System.out.println(m.length);
Vector v = new Vector();
// v.add(Object); : 배열 안에 데이터 담기
v.add("딸기");
v.add("포도");
v.add("사과");
v.add("배");
v.add("수박");
System.out.println("v : "+v);
System.out.println(v.capacity()); // 내부에서 처리할 수 있는 크기
System.out.println("총 데이터 수 : "+v.size());
// string 데이터를 어떻게 넣는거지?
String fruit = "두리안";
System.out.println(fruit.substring(0, 1)); // string은 substring 가능
Object obj = fruit; // Parent = new Child(); : 부모자식 관계이기 때문에
// 두리안 추가
v.add(obj);
System.out.println("v : "+v);
System.out.println(v.capacity()); // 내부에서 처리할 수 있는 최대 수용량
System.out.println("총 데이터 수 : "+v.size()); // 현제 데이터 크기
System.out.println("---------------------");
v.add("수박");
v.add("배");
v.add("수박");
v.add("배");
v.add("수박");
v.add("배");
v.add("수박");
v.add("배");
System.out.println("v : "+v);
System.out.println(v.capacity()); // 10개 넘으면, 자동으로 갯수 증가
System.out.println("총 데이터 수 : "+v.size());
System.out.println("------------------------");
// 첫번째 과일을 꺼내서 화면에 출려
Object obj2 = v.get(0);
System.out.println("obj2 : "+obj2);
System.out.println("obj2 : "+obj2.toString()); // 왜 딸기가 출력?
// 부모 클래스의 개체를 가져와서 출력
// 이름의 첫 글자만 화면에 출력
// System.out.println(obj2.substring(0, 1)); // 불가
String f = (String)obj2; // 형변환해야 참조값 전달 가능
System.out.println(f.substring(0, 1));
System.out.println("----------------------");
// 한 개씩 꺼내서 출력
for(int i=0; i<v.size(); i++) {
System.out.println(v.get(i));
}
System.out.println("-------------------------");
// 마지막부터 1개씩 출력
for(int i = v.size()-1; i>=0; i--) {
System.out.println(v.get(i));
}
}
}
|
cs |
* Stack : push, pop, get
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
|
package day16;
import java.util.Stack;
public class StackEx1 {
public static void main(String[] args) {
// Stack 구현해 놓은 클래스 : 후입선출(LIFO), 선입후출(FILO)
Stack s = new Stack();
s.push("딸기");
s.push("수박");
System.out.println("s : "+s);
s.push("배");
s.push("포도");
s.push("사과");
s.push("배");
System.out.println("s : "+s);
Object obj = s.pop();
System.out.println(obj);
System.out.println("s : "+s);
System.out.println("-----------------------");
// Vector의 자손 : Stack
// 벡터 같은 방법으로 꺼내기 가능
// > but, get은 꺼내긴 하지만 없애지는 않음 (pop은 삭제)
Object obj2 = s.get(0);
System.out.println(obj2);
System.out.println("s : "+s);
System.out.println("-----------------------");
}
}
|
cs |
[ Set ]
* HashSet : add, iterator, hasNext(), next
: Hash테이블을 이용해서 구현한 클래스, Set 인터페이스를 구현한 클래스(순서가 없음, 중복없음)
중복된 값을 허용하지 않는다. 순서가 존재하지 않는다. => 변수명.get(0) 불가
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
|
package day16;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetEx1 {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add("딸기");
hs.add("바나나");
hs.add("포도");
hs.add("딸기");
hs.add("딸기");
hs.add("딸기");
System.out.println("hs : "+hs);
// 중복된 값을 허용하지 않는다.
// hs.get(0); 불가 > 순서가 존재하지 않는다.
// 값을 꺼내려면..
Iterator it = hs.iterator();
// for문 쓰면 길이를 선정하기 애매함.. 따라서, while
while(it.hasNext()) { // hasNext : 다음 값을 가지고 있는지 true/false
Object obj1 = it.next();
System.out.println(obj1);
}
}
}
|
cs |
* HashSet : arrays, iterator, random, Arrays.toString > 배열
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
|
package day16;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
public class HashSetEx2 {
public static void main(String[] args) {
// 정수 배열 6자리
int[] m = new int[6];
// 1부터 45 사이의 정수를 생성
Random rnd = new Random();
HashSet hs = new HashSet();
// Hash는 중복된 값을 허용하지 않기 때문에, 중복되면 값이 사라짐
// 따라서, 중복된 값은 몽땅 제거된 6개의 번호를 얻으려면?
// hs.add(rnd.nextInt(45)+1);
// hs.add(rnd.nextInt(45)+1);
// hs.add(rnd.nextInt(45)+1);
// hs.add(rnd.nextInt(45)+1);
// hs.add(rnd.nextInt(45)+1);
// hs.add(rnd.nextInt(45)+1);
while(hs.size() < 6) {
hs.add(rnd.nextInt(45)+1);
}
// 배열에 담기
Iterator it = hs.iterator();
for(int i=0; i<m.length; i++) {
m[i] = (int)it.next();
}
Arrays.sort(m);
// 옆으로 출력
System.out.print(Arrays.toString(m));
// for(int i=0; i<m.length; i++) {
// // 배열에 할당
// m[i] = rnd.nextInt(45)+1; // 1~45
// for(int j = 0; j<i; j++) {
// // 중복된 값을 제거하는 방법은?
// // 중복되었니? 그럼 다시 뽑아
// if(m[i] == m[j]) {
// i--;
// break;
// }
// }
// }
//
// // 배열에 있는 요소를 출력
// System.out.println(Arrays.toString(m));
}
}
|
cs |
[ Map ]
* HashMap : put, get, iterator
> 키를 가지고 value를 구할 수 있음 (키는 중복 불가, value는 교체 가능)
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
|
package day16;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class HashMapEx1 {
public static void main(String[] args) {
HashMap hm = new HashMap();
// hm.put(key, value);
hm.put("귤", "제주");
hm.put("사과", "대구");
hm.put("바나나", "필리핀");
hm.put("두리안", "말레이시아");
System.out.println("hm : "+hm);
hm.put("바나나", "제주");
System.out.println("hm : "+hm);
// 키는 중복될 수 없다. (value만 교체)
hm.put("수박", "태국");
hm.put("망고", "태국");
System.out.println("hm : "+hm);
// value는 중복 가능
// 꺼낼 때 get > object로 받음
Object obj = hm.get("수박"); // 키를 가지고 value를 구함
System.out.println("수박 : "+obj);
System.out.println("---------------------------");
Set set = hm.keySet(); // 키값들만 set타입으로 리턴
System.out.println("set : "+set);
// 하나씩 꺼내려면 Iterator 객체로 만들어서..
Iterator it = set.iterator();
// 하나씩 꺼내기
while(it.hasNext()) {
Object k = it.next();
String key = (String)k;
System.out.println(key + " : "+ hm.get(key));
// 키를 알면 value 값을 꺼내올 수 있음
}
}
}
|
cs |
'Java' 카테고리의 다른 글
[Java] 로또 번호 생성기 (Lotto) (0) | 2023.03.24 |
---|---|
[Java] Wrapper Class / String 클래스 전용 <String> (0) | 2023.03.23 |
[Java] java.util 클래스 (java.util.Calendar) (0) | 2023.03.23 |
[Java] 윈도우 창 만들기 <응용> - 로봇 움직이기 (0) | 2023.03.22 |
[Java] Window Adapter 윈도우 어댑터 / Inner Class (Member, Static, Local, Anonymous) / 윈도우 창 응용 (버튼 50개, 구구단) (0) | 2023.03.22 |