Java11 | Collection ์ธํฐํ์ด์ค ๋ํ๋จผํธ
(์ถ์ฒ : JavaCodeExamples.com)
Collection
์ธํฐํ์ด์ค๋ Iterable
ํด๋์ค๋ฅผ ๊ตฌํํ๋ค. ์ด์ ๋ฐ๋ผ์ for-each loop
(ํฅ์๋ for๋ฌธ)์ ๊ตฌํํ ์ ์๋ค.
List
, Set
์ด Collection
์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๋๋ค. ๋ฐ๋ผ์ List์ Set ์ญ์ ํฅ์๋ for๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
Collection ์ธํฐํ์ด์ค์ ์ฃผ์ ๋ฉ์๋๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
Collection
์ ์๋ฐ ์ปฌ๋ ์
ํ๋ ์์ํฌ์ ๊ฐ์ฅ ์์ ๊ณ์ธต์ ์์นํ ์ธํฐํ์ด์ค๋ก์จ List
, Set
, Queue
๋ฑ์ ์ปฌ๋ ์
ํ๋ ์์ํฌ๊ฐ ์ด๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ๋ค์ํ ์ฅ์ ์ ํ์ฉํ ์ ์๋ค.
- ํ์ฉํ ์ ์๋ ์ฃผ์ ๊ธฐ๋ฅ์ผ๋ก
์ถ๊ฐ
,์ญ์
,์กฐํ
,ํฌ๊ธฐ ํ์ธ
๋ฑ์ด ์๋ค.
import java.util.Iterator;
import java.util.NoSuchElementException;
// `Collection` ํด๋์ค๋ `java.util.Iterable` ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํฉ๋๋ค.
class Collection<T> implements Iterable<T>
{
private T[] array;
private final int n;
// ์์ฑ์
public Collection(T[] array)
{
this.array = array;
this.n = array.length;
}
/**
* T ์ ํ์ ์์์ ๋ํ ๋ฐ๋ณต์๋ฅผ ๋ฐํํฉ๋๋ค.
*/
@Override
public Iterator<T> iterator()
{
return new Iterator<T>()
{
private int i = 0;
/**
* ์ด๋ ์ด์ ๋ ๋ง์ ์์๊ฐ ์์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค.
*/
@Override
public boolean hasNext() {
return (i < n && array[i] != null);
}
/**
* ๋ฐ๋ณต์ ๋ค์ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
* @throws NoSuchElementException ๋ฐ๋ณต์ด ์๋ ๊ฒฝ์ฐ
* ๋ ๋ง์ ์์
*/
@Override
public T next()
{
if (!hasNext()) {
throw new NoSuchElementException();
}
return array[i++];
}
};
}
}
class Main
{
public static void main(String[] args)
{
// ์ ์ ์ด๋ ์ด
Integer[] ints = new Integer[] { 1, 2, 3 };
// `Collection` ํด๋์ค์์ Integer ์ด๋ ์ด์ ๋ํํฉ๋๋ค.
Collection<Integer> collection = new Collection<>(ints);
// ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ ์ด์ ๋ฐ๋ณตํฉ๋๋ค.
Iterator<Integer> itr = collection.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
// for-each ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ ์ด์ ๋ฐ๋ณตํฉ๋๋ค.
// `Collection` ํด๋์ค๊ฐ `Iterable` ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ์๋ํฉ๋๋ค.
for (Integer i: collection) {
System.out.println(i);
}
}
}
Iterator
์ธํฐํ์ด์ค์ ๋ฐฉ์๊ณผ๋ ๋ค๋ฅด๋ค.class Main
{
public static void main(String[] args)
{
// ์ ์ ์ด๋ ์ด
Integer[] ints = new Integer[] { 1, 2, 3 };
// `Collection` ํด๋์ค์์ `Integer` ์ด๋ ์ด์ ๋ํํฉ๋๋ค.
Collection<Integer> collection = new Collection<>(ints);
Iterator<Integer> itr = collection.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
// for-each ๋ฃจํ๋ ์ฌ๊ธฐ์์ ์๋ํ์ง ์์ต๋๋ค.
}
}
Iterable
์ธํฐํ์ด์ค๋ ์ปฌ๋ ์
๊ตฌํ ๋ฐฉ๋ฒ์ ๋
ธ์ถ์ํค์ง ์์ผ๋ฉด์๋ ๊ทธ ์งํฉ์ฒด ์์ ์๋ ๋ชจ๋ ํญ๋ชฉ์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
- ํฅ์๋ for ๋ฃจํ ์ฌ์ฉ
- ์ผ๊ด๋ ์ธํฐํ์ด์ค -
iterator()
๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋ฐํ- ์ธ๋ถ ๋ฐ๋ณต์(External Iterator) ํจํด - ์ปฌ๋ ์ ๊ณผ ๋ฐ๋ณต ์์ ์ ๋ถ๋ฆฌ์ํค๋ ๋ฐฉ์์ผ๋ก, ์ปฌ๋ ์ ๋ฐ๋ณต ์์ ์ ์ํํ๋ ์ธ๋ถ ๋ฐ๋ณต์๋ฅผ ์ ๊ณตํ๊ณ , ํด๋ผ์ด์ธํธ๋ ์ด ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ์ฌ ์ปฌ๋ ์ ์ ์ํํ๋ค. ์ปฌ๋ ์ ์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ฐ๋ณต ์์ ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์, ์ ์ฐํ๊ณ ํ์ฅ๋ ์ฝ๋๋ฅผ ์ ๊ณตํ ์ ์๋ค.
(์ฐธ๊ณ : https://blog.javarouka.me/2012/01/01/internal-external-iterator/)- ๋ค์ค ๋ฐ๋ณต์ ์ฌ์ฉ -
- ์ปฌ๋ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉ - ์คํธ๋ฆผ๊ณผ forEach ๋ฉ์๋๋ฅผ ํจ๊ป ์ฌ์ฉํ์ฌ ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑ
Collections
ํด๋์ค๋ java.util.Collections
์ ์ ์๋์ด ์๋ค.
์ด ํด๋์ค๋ ์ ๋ ฌ, ์ญ์ ๋ ฌ, ์ด์งํ์, ๋ณต์ ๋ฑ ๋ค์ํ ์ ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
Arrays๊ฐ ๋ฐฐ์ด๊ณผ ๊ด๋ จ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ฒ๋ผ,
โญCollections๋ ์ปฌ๋ ์
๊ณผ ๊ด๋ จ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
fill(), copy(), sort(), binarySearch()๋ฑ์ ๋ฉ์๋๋ค์ ๋ ํด๋์ค ๋ชจ๋์ ํฌํจ๋์ด ์์ผ๋ฉฐ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ค.
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import static java.util.Collections.*; //Collections๋ฅผ ์๋ตํ ์ ์๊ฒ ํด์ค.
public class CollectionsEx {
public static void main(String[] args) {
List list = new ArrayList();
System.out.println(list); //[]
addAll(list, 1,2,3,4,5); //โญ์์ ๋ชจ๋ ์ถ๊ฐ
System.out.println(list); //[1, 2, 3, 4, 5]
rotate(list, 2); //โญ์ค๋ฅธ์ชฝ์ผ๋ก ๋ ์นธ์ฉ ์ด๋
System.out.println(list); //[4, 5, 1, 2, 3]
swap(list, 0, 2); //โญ์ฒซ๋ฒ์งธ์ ์ธ๋ฒ์งธ๋ฅผ ๊ตํ(swap)
System.out.println(list); //[1, 5, 4, 2, 3]
shuffle(list); //โญ์ ์ฅ๋ ์์์ ์์น๋ฅผ ์์๋ก ๋ณ๊ฒฝ
System.out.println(list); //[1, 2, 5, 3, 4]
sort(list, reverseOrder()); //โญ์ญ์ ์ ๋ ฌ reverse(list);์ ๋์ผ
System.out.println(list); //[5, 4, 3, 2, 1]
sort(list); //โญ์ ๋ ฌ
System.out.println(list); //[1, 2, 3, 4, 5]
int idx = binarySearch(list, 3); //โญ3์ด ์ ์ฅ๋ ์์น(index)๋ฅผ ๋ฐํ
System.out.println("index of 3 = " + idx); //index of 3 = 2
System.out.println("max="+max(list)); //โญmax=5
System.out.println("min="+min(list)); //โญmin=1
System.out.println("min="+max(list, reverseOrder())); //โญmin=1
fill(list, 9); //โญlist๋ฅผ 9๋ก ์ฑ์ด๋ค.
System.out.println("list="+list); //list=[9, 9, 9, 9, 9]
//โญlist์ ๊ฐ์ ํฌ๊ธฐ์ ์๋ก์ด list๋ฅผ ์์ฑํ๊ณ 2๋ก ์ฑ์ด๋ค. ๋จ, ๊ฒฐ๊ณผ๋ ๋ณ๊ฒฝ๋ถ๊ฐ
List newList = nCopies(list.size(), 2);
System.out.println("newList="+newList); //newList=[2, 2, 2, 2, 2]
System.out.println(disjoint(list, newList)); // โญ๊ณตํต ์์๊ฐ ์์ผ๋ฉด true , true
//โญnewList์ ์์๊ฐ๋ค์ list์ ๋ณต์ฌ
copy(list, newList);
System.out.println("newList="+newList); //newList=[2, 2, 2, 2, 2]
System.out.println("list="+list); //list=[2, 2, 2, 2, 2]
//โญlist์ ์์๊ฐ 2๋ฅผ ์ ๋ถ 1๋ก ๋ฐ๊ฟ
replaceAll(list, 2, 1);
System.out.println("list="+list); //list=[1, 1, 1, 1, 1]
//โญenumeration ๋ฐํ
Enumeration e = enumeration(list); // Enumeration ํ์
ArrayList list2 = list(e); // list(Enumeration e)๋ฅผ ์ฌ์ฉํด ์ํ๋ AL๋ฐํ list2=[1, 1, 1, 1, 1]
System.out.println("list2="+list2);
}
}
Collections.toC
๋ฉํฐ ์ฐ๋ ๋ (multi-thread) ํ๋ก๊ทธ๋๋ฐ์์ ๋ ํ๋์ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ (consistency) ์ ์ ์งํ๊ธฐ ์ํด์๋ ๊ณต์ ๋๋ ๊ฐ์ฒด์ ๋๊ธฐํ(synchronization)๊ฐ ํ์ํ๋ค.
Vector์ Hashtable๊ณผ ๊ฐ์ ๊ตฌ๋ฒ์ (JDK 1.2 ์ด์ ) ํด๋์ค๋ค์ ์์ฒด์ ์ผ๋ก ๋๊ธฐํ ์ฒ๋ฆฌ๊ฐ ๋์ด ์๋๋ฐ, ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ ๋ถํ์ํ ๊ธฐ๋ฅ์ด ๋์ด ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆฌ๋ ์์ธ์ด ๋๋ค.
๊ทธ๋์ ์๋ก ์ถ๊ฐ๋ ArrayList
์ HashMap
๊ณผ ๊ฐ์ ์ปฌ๋ ์
์ โญ๋๊ธฐํ๋ฅผ ์์ฒด์ ์ผ๋ก ์ฒ๋ฆฌํ์ง ์๊ณ ํ์ํ ๊ฒฝ์ฐ์๋ง java.util.Collections
ํด๋์ค์ ๋๊ธฐํ ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋๊ธฐํ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ณ๊ฒฝํ์๋ค.
Collections ํด๋์ค์ ๋๊ธฐํ ๋ฉ์๋ ์ฌ์ฉ๋ฐฉ๋ฒ
List syncList = Collections.synchronizedList(new ArrayList( ... ));
์์๊ณ์ธต๋ ํ์ธํ๊ธฐ
๊ฐ ์ธํฐํ์ด์ค์ ํน์ง
์ปฌ๋ ์ ํ๋ ์์์ด๋, '๋ฐ์ดํฐ ๊ตฐ็พค์ ์ ์ฅํ๋ ํด๋์ค๋ค์ ํ์คํํ ์ค๊ณ'์ด๋ค.
JDK 1.2๋ถํฐ ์ปฌ๋ ์ ํ๋ ์์์ด ๋ฑ์ฅํ๋ฉด์ ๋ค์ํ ์ข ๋ฅ์ ์ปฌ๋ ์ ํด๋์ค๊ฐ ์ถ๊ฐ๋๊ณ ๋ชจ๋ ์ปฌ๋ ์ ํด๋์ค๋ฅผ ํ์คํ๋ ๋ฐฉ์์ผ๋ก ๋ค๋ฃฐ ์ ์๋๋ก ์ฒด๊ณํ ๋์๋ค.
์ปฌ๋ ์
ํ๋ ์์์ ์ฅ์ :
โ ์ปฌ๋ ์
(๋ค์์ ๋ฐ์ดํฐ)๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ํ์ํ๊ณ ๋ค์ํ ํ๋ถํ ํด๋์ค๋ฅผ ์ ๊ณต
โก ๊ฐ์ฒด์งํฅ์ ์ค๊ณ
- ์ฌ์ฉ๋ฒ์ ์ตํ๊ธฐ์ ํธ๋ฆฌํจ.
- ์ฌ์ฌ์ฉ์ฑ์ด ๋์ ์ฝ๋๋ฅผ ์์ฑ
โญ ์ปฌ๋ ์ ํ๋ ์์์ ๋ํ์ ์ธํฐํ์ด์ค โถList, โทSet, โธMap
- List : ์์O, ๋ฐ์ดํฐ ์ค๋ณตO
๊ตฌํ ํด๋์ค : ArrayList, LinkedList, Stack, Vector ๋ฑ
- Set : ์์X, ๋ฐ์ดํฐ ์ค๋ณตX
๊ตฌํ ํด๋์ค : HashSet, TreeSet ๋ฑ
- Map : ํค(key)์ ๊ฐ(value) ์(pair)๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ์งํฉ
๊ตฌํ ํด๋์ค : HashMap, TreeMap, Hashtable, Properties ๋ฑ
โญList ์ธํฐํ์ด์ค๋ ์ค๋ณต์ ํ์ฉํ๋ฉด์ ์ ์ฅ์์๊ฐ ์ ์ง๋๋ ์ปฌ๋ ์ ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๋ค์ํ ํ์ ๊ตฌํํด๋์ค
- ArrayList : ๋๊ธฐํ ๋ณด์ฅX
- Vector : ๋๊ธฐํ ๋ณด์ฅ
- LinkedList
- Stack
List ์ฌ์ฉ ์์
import java.util.*;
class ArrayListEx1{
public static void main(String[] args) {
//โญ๋ฐฐ์ด ํฌ๊ธฐ๊ฐ 10์ธ ArrayList ๊ฐ์ฒด ์ฐธ์กฐ๋ณ์ list1 ์์ฑ
ArrayList list1 = new ArrayList(10);
//โญlist1์ ์ธํฐ์ ๊ฐ์ฒด๋ค ์์๋๋ก ์ถ๊ฐ. ๋จ, ๊ธฐ๋ณธํ์ ๋ฃ์ด๋ ์คํ ๋ฐ์ฑ๋์ด ๋ฌด๊ด
list1.add(new Integer(5));
list1.add(new Integer(4));
list1.add(new Integer(2));
list1.add(new Integer(0));
list1.add(new Integer(1));
list1.add(new Integer(3));
//โญlist2์๋ list1์ 1๋ฒ์ธ๋ฑ์ค๋ถํฐ 3๋ฒ์ธ๋ฑ์ค๊น์ง ์ถ์ถํ ๊ฐ ๋ด๊น
ArrayList list2 = new ArrayList(list1.subList(1,4));
//๐ฅ์ฌ์ฉ์ ์ ์ static ๋ฉ์๋ print
print(list1, list2);
Collections.sort(list1); //โญ list1๊ณผ list2๋ฅผ ์ ๋ ฌํ๋ค.
Collections.sort(list2); // Collections.sort(List l)
print(list1, list2);
//โญcontainsAll ๋ฉ์๋๋ ํด๋น ์ปฌ๋ ์
์์ ํฌํจ์ฌ๋ถ boolean์ผ๋ก ๋ฐํ. true
System.out.println("list1.containsAll(list2):" + list1.containsAll(list2));
//โญ add()๋ฉ์๋๋ก int๊ฐ ์๋ String์ถ๊ฐ (Object ๋ฐฐ์ด)
list2.add("B");
list2.add("C");
//โญํน์ ์ธ๋ฑ์ค์ ์ถ๊ฐํ ์๋ ์์.
list2.add(3, "A");
print(list1, list2);
//โญset์ update์ ๊ฐ๋
. 3๋ฒ์งธ ์ธ๋ฑ์ค์ value "AA"๋ก ๋ฐ๊พธ๊ธฐ
list2.set(3, "AA");
print(list1, list2);
//โญlist1์์ list2์ ๊ฒน์น๋ ๋ถ๋ถ๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ ์ญ์ ํ๋ค.
System.out.println("list1.retainAll(list2):" + list1.retainAll(list2));
print(list1, list2);
//๐กโญ list2์์ list1์ ํฌํจ๋ ๊ฐ์ฒด๋ค์ ์ญ์ ํ๋ค.
//๐กโญ i์ ๊ฐ์ list2.size()-1๋ถํฐ ์์ํ์ฌ 0๊น์ง ๊ฐ์ฐ
for(int i= list2.size()-1; i >= 0; i--) {
//โญlist1์ด list2์ i์ธ๋ฑ์ค ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด
if(list1.contains(list2.get(i)))
//โญlist2์์ ๊ทธ i๋ฒ์งธ ์์๋ฅผ ์ญ์ ํ๋ค.
list2.remove(i);
}
print(list1, list2);
} // main์ ๋
static void print(ArrayList list1, ArrayList list2) {
System.out.println("list1:"+list1);
System.out.println("list2:"+list2);
System.out.println();
}
} // class
<์คํ๊ฒฐ๊ณผ>
list1:[5, 4, 2, 0, 1, 3]
list2:[4, 2, 0]
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4]
list1.containsAll(list2):true
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4, A, B, C]
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4, AA, B, C]
list1.retainAll(list2):true
list1:[0, 2, 4]
list2:[0, 2, 4, AA, B, C]
list1:[0, 2, 4]
list2:[AA, B, C]
โญSet ์ธํฐํ์ด์ค๋ ์ค๋ณต์ ํ์ฉํ์ง ์๊ณ ์ ์ฅ์์๊ฐ ์ ์ง๋์ง ์๋ ์ปฌ๋ ์ ํด๋์ค๋ฅผ ๊ตฌํํ๋๋ฐ ์ฌ์ฉ๋๋ค.
HashSet, TreeSet ๋ฑ์ด ์กด์ฌํ๋ค.
HashSet์ ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ ๋๋ add๋ฉ์๋๋ addAll๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ง์ผ HashSet์ ์ด๋ฏธ ์ ์ฅ๋์ด ์๋ ์์์ ์ค๋ณต๋ ์์๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ๋ค๋ฉด ์ด ๋ฉ์๋๋ค์ false๋ฅผ ๋ฐํํจ์ผ๋ก์จ ์ค๋ณต๋ ์์์ด๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์คํจํ๋ค๋ ๊ฒ์ ์๋ ค์ค๋ค.
โก๏ธ ์ด๋ฌํ HashSet์ ํน์ง์ ์ด์ฉํ์ฌ, ์ปฌ๋ ์
๋ด์ ์ค๋ณต ์์๋ค์ ์ฝ๊ฒ ์ ๊ฑฐํ ์ ์๋ค.
import java.util.*;
class HashSetEx1 {
public static void main(String[] args) {
//โญ objArr์ ์ฌ๋ฌ ์ค๋ณต๋ ๋ฌธ์์ด ๊ฐ์ด ์กด์ฌํ๋ ๋ฐฐ์ด. (๋จ, Integer๊ฐ์ฒด ํ๋ ๋ผ์ด์์)
Object[] objArr = {"1",new Integer(1),"2","2","3","3","4","4","4"};
//โญ HashSet ๊ฐ์ฒด set์ ์ ์ฅ. (ํ์
์ ๋ณด๋, set์ ๋ฉ์๋๋ง ์ฌ์ฉํ ๊ฒ์ด๊ตฌ๋!)
Set set = new HashSet();
//โญHashSet ๊ฐ์ฒด set์ด objArr์ ์์๋ฅผ ์ํํ๋ฉฐ addํจ)
for(int i=0; i < objArr.length; i++) {
set.add(objArr[i]); // HashSet์ objArr์ ์์๋ค์ ์ ์ฅํ๋ค.
}
// HashSet์ ์ ์ฅ๋ ์์๋ค์ ์ถ๋ ฅํ๋ค.
//โญ ๊ฒฐ๊ณผ๋ [1,1,2,3,4] ์ผ ๊ฒ์ด๋ค. ์์ 1์ Integer ํ์
์ด๊ณ , ๋ค์ 1์ String ํ์
์ด๋ผ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด์ด๋ค.
System.out.println(set);
}
}
<์คํ๊ฒฐ๊ณผ>
[1, 1, 2, 3, 4]
Map.Entry
์ธํฐํ์ด์ค๋ Map ์ธํฐํ์ด์ค์ ๋ด๋ถ ์ธํฐํ์ด์ค์ด๋ค.
(์ธํฐํ์ด์ค๋ ๋ด๋ถ ์ธํฐํ์ด์ค๊ฐ ์กด์ฌํ ์ ์๋ค.)
Map ์ ์ ์ฅ๋๋ key-value์์ ๋ค๋ฃจ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก Entry ์ธํฐํ์ด์ค๋ฅผ ์ ์ํด ๋์๋ค. ์ด ๊ฒ์ ๋ณด๋ค ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ค๊ณํ๋๋ก ์ ๋ํ๊ธฐ ์ํ ๊ฒ์ผ๋ก Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค์์๋ Map.Entry
์ธํฐํ์ด์ค๋ ํจ๊ป ๊ตฌํํด์ผํ๋ค.
๋ด๋ถ ๊ตฌํ ๋ฐฉ์
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
// Map.Entry ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ Key-Value ์์ ๊ฐ์ง๊ณ ์๋ HashMap์ Node ๊ฐ์ฒด๋ค์ Set ์งํฉ์ ๋ฐํ
Set<Map.Entry<String, Integer>> entry = map.entrySet();
System.out.println(entry); // [1=a, 2=b, 3=c]
// Set์ ์ํํ๋ฉด์ Map.Entry๋ฅผ ๊ตฌํํ Node ๊ฐ์ฒด์์ key์ value๋ฅผ ์ป์ด ์ถ๋ ฅ
for (Map.Entry<String, Integer> e : entry) {
System.out.printf("{ %s : %d }\n", e.getKey(), e.getValue());
}
<์คํ๊ฒฐ๊ณผ>
[a=1, b=2, c=3]
{ a : 1 }
{ b : 2 }
{ c : 3 }
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 3)
map.put("B", 4)
for(Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("entry.getKey() :" + entry.getKey());
System.out.println("entry.getValue() :" + entry.getValue());
}
System.out.println( map.entrySet().stream()
.map(Map.Entry<String, Integer> ::getKey)
.collect(Collectors.toList())
);
<์คํ๊ฒฐ๊ณผ>
entry.getKey() : A
entry.getValue() : 3
entry.getKey() : B
entry.getValue() : 4
[A, B]