[ Set_ HashSet ] _int 타입
package jun19;
import java.util.HashSet;
//Set : 중복 없어요. index없어요.
//ArrayList : 중복저장합니다. 순서가 있습니다.
public class Set01 {
public static void main(String[] args) {
HashSet<Integer> set01 = new HashSet<Integer>();
set01.add(100);
set01.add(101);
set01.add(102);
set01.add(103);
set01.add(103);
set01.add(100);
System.out.println(set01.size()); // 4
System.out.println(set01); // [100, 101, 102, 103]
set01.clear();
System.out.println(set01.size()); // 0
System.out.println(set01); // []
}
}
( 로또번호추첨 ) _ 알아서 중복제거됨 굿
while( set01.size() < 6 ) {
set01.add( (int) (Math.random() * 45) + 1);
}
System.out.println(set01.size()); // 6
System.out.println(set01); // [ 랜덤번호 여섯개 ]
for (Integer integer : set01) {
System.out.println(integer); // 랜덤번호 여섯개(값만출력)
}
Set은 값의 순서(index)가 없기때문에 for문으로 출력할 수 없음* (get으로 값을 가져올 수가 없음*)
정렬도 불가**, List 타입로 바꾸면 정렬가능~
( HashSet --> ArrayList 변환 후 가져오기 )
// 정렬 -> List로 변경하기
ArrayList<Integer> lotto = new ArrayList<Integer>(set01);
System.out.println(lotto); // [33, 36, 20, 41, 30, 31]
Collections.sort(lotto); // 정렬(오름차순)
System.out.println(lotto); // [20, 30, 31, 33, 36, 41]
for (int i = 0; i < lotto.size(); i++) {
System.out.println(lotto.get(i)); // 정렬한 로또번호6개(list값) 출력
}
[ 객체를 참조하는 ArrayList 생성 ]
package jun19;
import java.util.ArrayList;
import java.util.Arrays;
//주소록 만들어보기
class Human {
String name;
String tel;
public Human(String name, String tel) { // 생성자의 역할 -> 필드초기화, 객체생성
this.name = name;
this.tel = tel;
}
}
public class Temp {
public static void main(String[] args) {
// 제네릭에는 R타입형태만 적습니다.
ArrayList<Human> arr01 = new ArrayList<Human>(); // 명시된 생성자 Human을 호출하여 ArrayList 객체생성
arr01.add(new Human("홍길동", "010-5555-5678"));
arr01.add(new Human("김나래", "010-5488-0147"));
arr01.add(new Human("임길도", "010-2395-0678"));
arr01.add(new Human("정길동", "010-8025-0503"));
arr01.add(new Human("박길동", "010-1490-4509"));
System.out.println(arr01); // 주소값 출력
System.out.println(arr01.get(1)); // 주소값 출력
for (Human human : arr01) { // arr01의 human들(Human객체의)을 하나씩 가져오기
System.out.println(human.name + " " + human.tel);
System.out.println("");
}
}
}
<> 요 괄호 안에는(제네릭에는) R타입(참조타입)만 올 수 있음!!!
** Integer도 R타입!!! (int의 R타입형태인거)
[jun19.Human@1eb44e46, jun19.Human@6504e3b2, jun19.Human@515f550a, jun19.Human@626b2d4a, jun19.Human@5e91993f]
jun19.Human@6504e3b2
홍길동 010-5555-5678
김나래 010-5488-0147
임길도 010-2395-0678
정길동 010-8025-0503
박길동 010-1490-4509
[ Set_ HashSet ] _String 타입
package jun19;
import java.util.HashSet;
public class temp02 {
public static void main(String[] args) {
// String타입을 저장하는 set 생성 (set01)
HashSet<String> set01 = new HashSet<String>();
set01.add("사과");
set01.add("복숭아");
set01.add("포도");
set01.add("토마토");
set01.add("수박");
set01.add("참외");
set01.add("배");
set01.add("사과");
System.out.println(set01); // 입력한 순서대로 들어가진 않음!
System.out.println(set01.size()); // 중복은 하나만 저장
}
}
[배, 복숭아, 포도, 토마토, 수박, 사과, 참외]
7
(출력)
// 방법1 (forEach)
for (String str : set01) {
System.out.println(str);
}
// 방법2 (set -> list 변환후 for문)
ArrayList<String> arr01 = new ArrayList<String>(set01);
System.out.println(arr01);
for (int i = 0; i < arr01.size(); i++) {
System.out.println(arr01.get(i));
}
배
복숭아
포도
토마토
수박
사과
참외
// 방법1
[배, 복숭아, 포도, 토마토, 수박, 사과, 참외]
배
복숭아
포도
토마토
수박
사과
참외
// 방법2
( Iterator 로 출력 ) _ Iterator 반복자로 형태 변환 후 출력 (책 P. 566)
Iterator<String> it = set01.iterator();
while (it.hasNext()) { // 읽어올 요소가 있다면 (참이면)
String str = (String) it.next(); // 하나씩 데이터 읽어오기
System.out.println(str);
}
.hasNext() : 읽어올 요소가 있는지 참/거짓으로 반환
.next() : 다음 데이터를 읽어옵니다.
.remove() : next()로 읽어온 요소를 삭제합니다.
메소드 호출 순서 : hasNext() -> next() -> remove()
[Java]이터레이터(Iterator) 란? (tistory.com)
[Java]이터레이터(Iterator) 란?
Iterator는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것이다. 컬렉션 프레임워크란 데이터를 저장하는 클래스들을 표준화한 설계이다. 컬렉션
thefif19wlsvy.tistory.com
[ Map ]
package jun19;
/*
List : 중복허용, 순서가 있습니다.
Set : 중복x, 순서x
Map : 키와 값으로 저장합니다. 쌍으로 저장합니다.
키는 중복될 수 없습니다. 값은 중복 가능합니다.
*/
import java.util.HashMap;
public class Map01 {
public static void main(String[] args) {
// Key, Value = 사전
HashMap<String, String> map01 = new HashMap<String, String>();
// map01.put(120, 1000); // 데이터타입 다름, 불가능
map01.put("사과", "사과입니다.");
map01.put("배", "배입니다.");
map01.put("토마토", "배입니다.");
map01.put("사과", "사과라고 저장합니다."); // 중복되는 Key 값에 대해서는 Value 값을 자동으로 업데이트
System.out.println(map01);
System.out.println("토마토"); // key값으로 Value값 출력
System.out.println("사과");
System.out.println("포도");
System.out.println("==========================");
System.out.println(map01.size());
System.out.println(map01.isEmpty()); // 비어있는지? --> true / false
System.out.println(map01.remove("사과")); // 사과라고 저장합니다. --> 출력 후 삭제됨
System.out.println("==========================");
System.out.println(map01.get("배"));
System.out.println(map01.get("토마토"));
System.out.println(map01.get("사과"));
}
}
.put ( Key, Value ) : Key값과 Value값 넣기
.get( Key ) : Key값 이용해서 Value값 가져옴
.isEmpty( ) : 비어있는지 확인 (true/false)
.remove( Key ) : 삭제됨
{배=배입니다., 토마토=배입니다., 사과=사과라고 저장합니다.}
토마토
사과
포도
==========================
3
false
사과라고 저장합니다.
==========================
배입니다.
배입니다.
사과라고 저장합니다.
( map에서 key값, value값 뽑아내기 )
// keySet() : key를 뽑아줍니다.
Set<String> ks = map01.keySet(); // key값만 뽑아내기
System.out.println(ks); // [배, 토마토, 사과]
for (String str : ks) {
System.out.println(map01.get(str)); // 뽑아낸 key값으로 value값 출력
}
// values() : value를 뽑아줍니다.
System.out.println(map01.values()); // value값만 뽑아내기
.keySet() : key값을 뽑아줌
.values() : value값들 뽑아줌
[배, 토마토, 사과]
배입니다.
배입니다.
사과라고 저장합니다.
[배입니다., 배입니다., 사과라고 저장합니다.]
( key값, value값 유무확인, vlaue값 업데이트 및 삭제 )
System.out.println(map01.containsKey("바나나"));
System.out.println(map01.containsKey("사과"));
System.out.println(map01.containsValue("바나나입니다."));
System.out.println(map01.containsValue("배입니다."));
System.out.println(map01);
map01.replace("토마토", "토마토입니다.");
System.out.println(map01);
map01.clear();
System.out.println(map01);
System.out.println(map01.size());
.containsKey ( Key ) : Key의 유무
.containsValue ( Value ) : Value의 유무
.replace ( Key , Value ) : 해당 Key에 대한 Value값 업데이트
> .put( Key , Value )을 사용해도 value값 업데이트가 가능하지만, 혹시나 key값을 잘못입력하는 경우를 방지하기 위해
replace를 사용하는듯..?
false
true
false
true
{배=배입니다., 토마토=배입니다., 사과=사과라고 저장합니다.}
{배=배입니다., 토마토=토마토입니다., 사과=사과라고 저장합니다.}
{}
0
http://www.tcpschool.com/java/java_collectionFramework_map
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
[ 로그인과정 구현 ]
package jun19;
// 로그인과정 구현
import java.util.HashMap;
import java.util.Scanner;
public class Map02 {
public static void main(String[] args) {
// key = id value = pw
HashMap<String, String> map = new HashMap<String, String>();
map.put("admin", "01234567");
map.put("root", "01234567");
map.put("test", "testtest");
map.put("admin", "admin01234"); // key 중복
Scanner sc = new Scanner(System.in);
boolean loginId = true;
while(loginId) {
System.out.print("아이디를 입력하세요 : ");
String id = sc.next();
if (map.containsKey(id)) { // // id가 있다면 true
while (loginId) {
System.out.println("암호를 입력하세요 : ");
String pw = sc.next();
if(map.get(id).equals(pw)) { // 입력한 id의 value값과 입력한 pw의 값이 일치한다면 true
System.out.println("일치합니다.");
loginId = false;
} else {
System.out.println("암호 불일치");
}
}
} else {
System.out.println("아이디가 없습니다.");
}
}
}
}
책 p. 586
Stack , Queue
'국비과정 > JAVA' 카테고리의 다른 글
20230620 _[13일차]_02. 접근제어자_ 상속 * (0) | 2023.06.22 |
---|---|
20230620 _[13일차]_03. 추상화 (0) | 2023.06.21 |
20230620 _[13일차]_01. 접근제어자 (0) | 2023.06.21 |
20230619 _[12일차]_01. ArrayList (0) | 2023.06.20 |
20230616 _[11일차]_03. 여러생성자 만들기 연습 & static 변수 (0) | 2023.06.20 |