Post

[Java] Set Iterator Hashmap Calendar

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ Set, ์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” Iterator, ํ‚ค-๊ฐ’ ์Œ์ธ HashMap, ํ–ฅ์ƒ๋œ for๋ฌธ forEach, ๊ทธ๋ฆฌ๊ณ  ๋‚ ์งœ ํด๋ž˜์Šค DateยทCalendar๋ฅผ ์ •๋ฆฌํ•œ๋‹ค.


1. Set โ€” ์ค‘๋ณต ์—†๋Š” ์ง‘ํ•ฉ

HashSet: ์ค‘๋ณต ์›์†Œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†๊ณ , ์ˆœ์„œ๊ฐ€ ์—†๋‹ค. ๊ฐ’์˜ ์œ ๋ฌด ๊ฒ€์‚ฌ์— ํŠนํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•ด์‹œ ์ฝ”๋“œ๋กœ ๊ฒ€์‚ฌํ•ด ์†๋„๊ฐ€ ์ข‹๋‹ค.

1
2
3
4
5
6
7
8
HashSet<String> bloodTypeSet = new HashSet<>();
bloodTypeSet.add("A");
bloodTypeSet.add("B");
bloodTypeSet.add("O");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");   // ์—ฌ๋Ÿฌ ๋ฒˆ ๋„ฃ์–ด๋„
bloodTypeSet.add("AB");   // ํ•˜๋‚˜์˜ AB๋กœ ์ทจ๊ธ‰
System.out.println(bloodTypeSet);

Desktop View

AB๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋„ฃ์–ด๋„ ํ•˜๋‚˜๋งŒ ์ €์žฅ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ๊ฐ’์„ ๊บผ๋‚ผ๊นŒ? ๋‹ต์€ toString์— ์ˆจ์€ Iterator์— ์žˆ๋‹ค.


2. Iterator โ€” ์ˆœ์„œ ๋ถ€์—ฌ

Iterator: ์ˆœ์„œ๊ฐ€ ์—†๋Š” ๊ฐ์ฒด์— ์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•˜๊ฑฐ๋‚˜, ์ˆœ์„œ ๋ฐฉ์‹์„ iterator์‹์œผ๋กœ ๋ฐ”๊ฟ€ ๋•Œ ์‚ฌ์šฉ. hasNext()๋กœ ๋‹ค์Œ ๊ฐ’ ์œ ๋ฌด๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  next()๋กœ ๊ฐ’์„ ๊บผ๋‚ธ๋‹ค.

1
2
3
4
Iterator<String> iter = bloodTypeSet.iterator();   // Set์— ์ˆœ์„œ ๋ถ€์—ฌ
while (iter.hasNext()) {
    System.out.println(iter.next());
}

Desktop View

๋ฉ”์†Œ๋“œ์—ญํ• 
iterator()์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•œ Iterator ๋ฐ˜ํ™˜
hasNext()๋‹ค์Œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
next()๋‹ค์Œ ๊ฐ’์„ ๊บผ๋ƒ„

๐Ÿ’ก HashSet์˜ toString() ๋‚ด๋ถ€์—๋„ Iterator<E> it = iterator();(this.iterator()์˜ ์ƒ๋žต)๊ฐ€ ์“ฐ์ธ๋‹ค. ๊ทธ๋ž˜์„œ ์ธ๋ฑ์Šค ์—†๋Š” Set๋„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.


3. HashMap โ€” ํ‚คยท๊ฐ’ ์Œ

HashMap: Key-Value ํ•œ ์Œ์œผ๋กœ ์ €์žฅํ•˜๋ฉฐ ๊ฒ€์ƒ‰์ด ๋ชฉ์ . Key๋Š” ์ค‘๋ณต ๋ถˆ๊ฐ€(Set), Value๋Š” ์ค‘๋ณต ํ—ˆ์šฉ. ๊ฐ™์€ Key๋ฅผ ๋„ฃ์œผ๋ฉด Value๊ฐ€ ์ตœ์‹  ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ๋œ๋‹ค.

1
2
3
4
5
6
7
8
9
HashMap<String, Integer> fruitMap = new HashMap<>();
fruitMap.put("์‚ฌ๊ณผ", 3000);
fruitMap.put("๋ฐฐ", 4000);
fruitMap.put("์ˆ˜๋ฐ•", 8000);
fruitMap.put("์ž๋‘", 800);

System.out.println(fruitMap.size());     // 4 (ํ•œ ์Œ = 1)
System.out.println(fruitMap);            // {์‚ฌ๊ณผ=3000, ...}
System.out.println(fruitMap.get("๋ฐฐ"));  // 4000 (ํ‚ค๋กœ ๊ฐ’ ์กฐํšŒ)

Desktop View

๋ฉ”์†Œ๋“œ์—ญํ• 
put(k, v)ํ‚ค-๊ฐ’ ์Œ ์ €์žฅ
get(k)ํ‚ค๋กœ ๊ฐ’ ์กฐํšŒ
size()์Œ์˜ ๊ฐœ์ˆ˜ (8์ด ์•„๋‹ˆ๋ผ 4)
keySet()ํ‚ค๋“ค๋งŒ Set์œผ๋กœ
values()๊ฐ’๋“ค๋งŒ

ํ‚ค ๋ถ„๋ฆฌ โ€” keySet()์œผ๋กœ ํ‚ค๋งŒ ๋ฝ‘์•„ Iterator๋กœ ์ˆœํšŒํ•œ๋‹ค.

1
2
3
4
Iterator<String> fruitName = fruitMap.keySet().iterator();
while (fruitName.hasNext()) {
    System.out.println(fruitName.next());
}

Desktop View


4. forEach (ํ–ฅ์ƒ๋œ for๋ฌธ)

์ผ๋ฐ˜ for๋ฌธ์€ ์ดˆ๊ธฐ์‹; ์กฐ๊ฑด์‹; ์ฆ๊ฐ์‹์ด์ง€๋งŒ, ํ–ฅ์ƒ๋œ for๋ฌธ์€ ์ฝœ๋ก (:)์œผ๋กœ ์ด์–ด์ง€๊ณ  ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์•Œ์•„์„œ ์ •ํ•œ๋‹ค.

1
2
3
for (์ž๋ฃŒํ˜• ๋ณ€์ˆ˜๋ช… : ๋ฐฐ์—ด/์ปฌ๋ ‰์…˜) {
    ๋ฐ˜๋ณตํ•  ๋ฌธ์žฅ;
}
1
2
3
4
String[] arData = {"์•ˆ๋…•", "ํ•˜์„ธ์š”"};
for (String data : arData) {   // arData์˜ ๊ฐ’์ด ํ•˜๋‚˜์”ฉ data๋กœ
    System.out.println(data);
}

2์ฐจ์› ๋ฐฐ์—ด์€ ์ด์ค‘์œผ๋กœ ์“ด๋‹ค. (๋ฐ”๊นฅ์€ ํ–‰, ์•ˆ์ชฝ์€ ์—ด)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int[][] arrData = {
    {10, 25, 30}, {11, 24, 35}, {12, 23, 40}, {13, 22, 45}, {14, 21, 50}
};
int num = 0;
for (int[] arData : arrData) {          // ํ–‰ ๋‹จ์œ„
    num++;
    int total = 0;
    for (int data : arData) {           // ๊ทธ ํ–‰์˜ ์—ด๋“ค
        total += data;
    }
    double avg = (double) total / arData.length;
    avg = Double.parseDouble(String.format("%.2f", avg));
    System.out.println(num + "๋ฒˆ ํ•™์ƒ ์ด ์ : " + total + "์ ");
    System.out.println(num + "๋ฒˆ ํ•™์ƒ ํ‰๊ท : " + avg + "์ ");
}

HashMap์˜ ๊ฐ’ ํ‰๊ท ๋„ forEach๋กœ ๊ฐ„๋‹จํžˆ ๊ตฌํ•œ๋‹ค.

1
2
3
4
5
6
7
int sum = 0;
for (int data : fruitMap.values()) {
    sum += data;
}
double avg = (double) sum / fruitMap.values().size();
avg = Double.parseDouble(String.format("%.2f", avg));
System.out.println(avg);

Desktop View


5. Date์™€ Calendar

Date

1
2
Date today = new Date();
System.out.println(today);   // ํ˜„์žฌ ์‹œ๊ฐ„ (๊ฐ€๋…์„ฑ ๋‚ฎ์Œ)

๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ ธ SimpleDateFormat์œผ๋กœ ํฌ๋งทํ•œ๋‹ค.

1
2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy๋…„ MM์›” dd์ผ");
System.out.println(sdf.format(today));

Desktop View

Calendar

Calendar๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋ผ new๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๋‹ฌ๋ ฅยท์‹œ๊ฐ„์€ ๊ฐ์ž ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋ฉด ์•ˆ ๋˜๊ณ  ํ•˜๋‚˜๋งŒ ์กด์žฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ. ๋Œ€์‹  getInstance()๋กœ ์–ป๋Š”๋‹ค.

1
2
3
4
5
6
Calendar cal = Calendar.getInstance();   // new ๋Œ€์‹  getInstance()
cal.set(2021, 11, 04);                    // ์ฃผ์˜: 11 = 12์›”!

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(cal.getTime()));  // Calendar โ†’ Date ๋ณ€ํ™˜
System.out.println(cal.get(Calendar.MONTH) + 1); // ์›”๋„ +1 ํ•„์š”

Desktop View

โš ๏ธ ์›”์€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. 12์›”์„ ๋„ฃ์œผ๋ ค๋ฉด set(..., 11, ...), ์›”์„ ๊บผ๋‚ผ ๋•Œ๋„ +1์„ ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ format()์—๋Š” Date๋งŒ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ cal.getTime()์œผ๋กœ Calendar๋ฅผ Date๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.


๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
6
Set ยท Iterator ยท HashMap ยท forEach ยท Date
โ”œโ”€ HashSet   ์ค‘๋ณตX, ์ˆœ์„œX (์œ ๋ฌด ๊ฒ€์‚ฌ ํŠนํ™”)
โ”œโ”€ Iterator  ์ˆœ์„œ ๋ถ€์—ฌ, hasNext()/next()
โ”œโ”€ HashMap   Key(์ค‘๋ณตX)-Value(์ค‘๋ณตO), get์œผ๋กœ ์กฐํšŒ
โ”œโ”€ forEach   for(ํƒ€์ž… v : ์ปฌ๋ ‰์…˜) โ€” ๋ฐ˜๋ณต ์ž๋™
โ””โ”€ Date/Calendar  SimpleDateFormat ํฌ๋งท, Calendar๋Š” ์›” 0๋ถ€ํ„ฐ
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
HashSet์ค‘๋ณต ์—†๋Š” ์ง‘ํ•ฉ
Iterator์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•ด ์ˆœํšŒ
HashMapํ‚ค-๊ฐ’ ์Œ ์ €์žฅยท๊ฒ€์ƒ‰
forEach์ฝœ๋ก  ๊ธฐ๋ฐ˜ ํ–ฅ์ƒ๋œ for๋ฌธ
Calendar์ถ”์ƒ ํด๋ž˜์Šค, getInstance()๋กœ ์‚ฌ์šฉ(์›” 0๋ถ€ํ„ฐ)

SetยทMapยทIteratorยทforEach๋Š” ์ž๋ฐ” ์ปฌ๋ ‰์…˜์˜ ๊ธฐ๋ณธ๊ธฐ๋‹ค. ํŠนํžˆ HashMap์˜ Key๊ฐ€ Set(์ค‘๋ณต ๋ถˆ๊ฐ€)์ด๋ผ๋Š” ์ , Calendar์˜ ์›”์ด 0๋ถ€ํ„ฐ๋ผ๋Š” ํ•จ์ •์„ ๊ธฐ์–ตํ•˜๋ฉด ์‹ค์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.