๐ ์ฐธ๊ณ ํ ์ฑ
- ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ์ ๋ฆฌํ๊ณ ์ถ๊ฐ์ ์ผ๋ก ๊ถ๊ธํ ๊ฒ๋ค์ ์ ๋ฆฌํ์ต๋๋ค -
๐ฅ ๐ฅ ๐ฅ
โ๏ธ Set<E>_ 646p
• Set<E>
: ๋์ผํ ํ์ ์ ๋ฌถ์ด ๊ด๋ฆฌํ๋ ์๋ฃ๊ตฌ์กฐ๋ก ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์ง ์์, ์งํฉ์ ๊ฐ๋ ๊ณผ ๊ฐ์ ์ปฌ๋ ์ ์ด๋ค.
Set<String> hset1 = new HashSet<String>();
hset1.add("a");
hset1.add("b");
hset1.add("c");
System.out.println(hset1.toString());
System.out.println(hset1.size());
hset1.add("a");
System.out.println(hset1.toString());
System.out.println(hset1.size());
Set<E>๋ ์ธ๋ฑ์ค ์ ๋ณด๊ฐ ์์ด์ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณตํด ์ ์ฅํ๋ฉด ์ค๋ณต๋ ๋ฐ์ดํฐ ์ค ํน์ ๋ฐ์ดํฐ๋ฅผ ์ง์นญํด ๊บผ๋ผ ๋ฐฉ๋ฒ์ด ์๋ค. Set<E>๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด ๋ฐ์ดํฐ ๊ทธ ์์ฒด์ธ ๊ฒ์ด๋ค. ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด hset1์ a,b,c๋ฅผ ์ ์ฅํ๊ณ ์ดํ์ a๋ฅผ ๋ ํ ๋ฒ ์ ์ฅํ๋ค. Set<E>๋ ๋์ผํ ๋ฐ์ดํฐ์ ์ค๋ณต ์ ์ฅ์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก, ์ถ๋ ฅ๋๋ ๊ฐ๊ณผ ์ฌ์ด์ฆ์ ํฌ๊ธฐ๋ ๋ณ๋๋์ง ์๋๋ค. ์ด๋ ์ถ๋ ฅ์ ์ ๋ ฅ ์์์ ๋ค๋ฅด๊ฒ ์ถ๋ ฅ๋ ์ ์๋ค.
• Set<E>์ ์ฃผ์ ๋ฉ์๋
๊ตฌ๋ถ | ๋ฆฌํด ํ์ | ๋ฉ์๋๋ช | ๊ธฐ๋ฅ |
๋ฐ์ดํฐ ์ถ๊ฐ | boolean | add(E element) | ๋งค๊ฐ๋ณ์๋ก ์ ๋ ฅ๋ ์์๋ฅผ ๋ฆฌ์คํธ์ ์ถ๊ฐ |
boolean | addAll (Collection<? Extends E> c) |
๋งค๊ฐ๋ณ์๋ก ์ ๋ ฅ๋ ์ปฌ๋ ์ ์ ์ฒด๋ฅผ ์ถ๊ฐ | |
๋ฐ์ดํฐ ์ญ์ | boolean | remove(Object o) | ์์ ์ค ๋งค๊ฐ๋ณ์ ์ ๋ ฅ๊ณผ ๋์ผํ ๊ฐ์ฒด ์ญ์ |
void | clear() | ์ ์ฒด ์์ ์ญ์ | |
๋ฐ์ดํฐ ์ ๋ณด ์ถ์ถ |
boolean | isEmpty() | Set<E> ๊ฐ์ฒด๊ฐ ๋น์ด ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฆฌํด |
boolean | contains(Object o) | ๋งค๊ฐ๋ณ์๋ก ์ ๋ ฅ๋ ์์๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฆฌํด | |
int | size() | ๋ฆฌ์คํธ ๊ฐ์ฒด ๋ด์ ํฌํจ๋ ์์์ ๊ฐ์ | |
iterator<E> | iterator() | Set<E> ๊ฐ์ฒด ๋ด์ ๋ฐ์ดํฐ๋ฅผ ์ฐ์ํด ๊บผ๋ด๋ iterator ๊ฐ์ฒด๋ฆฌํด |
|
Set<E> ๊ฐ์ฒด ๋ฐฐ์ด ๋ณํ |
Object[] | toArray() | ๋ฆฌ์คํธ๋ฅผ Object ๋ฐฐ์ด๋ก ๋ณํ |
T[] | toArraty(T[] t) | ์ ๋ ฅ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ํ์ ์ ๋ฐฐ์ด๋ก ๋ฐํ |
โ๏ธ HashSet<E>_ 648p
• HashSet<E>
: Set<E> ์ธํฐํ์ด์ค์ ๋ํ์ ์ธ ๊ตฌํ ํด๋์ค๋ก, ์ ์ฅ์ฉ๋์ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ ๊ธฐ๋ณธ ์์ฑ์๋ก ์์ฑํ ๋ ๊ธฐ๋ณธ๊ฐ์ 16์ด๋ค.
• contains
: Set์ ํฌํจ๋ ๊ฐ์ด ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฆฌํดํ๋ค.
• iterator
: ๋ฐ์ดํฐ๋ฅผ ์ฐ์ํด์ ๊บผ๋ธ๋ค.
hset1.contains("a"); // true
Iterator<String> iterator = hset1.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next() + " "); // a b c
}
contains(Object o) ๋ฉ์๋๋ HashSet<E> ๊ฐ์ฒด ์์ ํด๋น ์์๊ฐ ์๋์ง๋ฅผ true/false๋ก ๋ฆฌํดํ๋ค.
iterator( )๋ Set<E> ๊ฐ์ฒด ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ 1๊ฐ์ฉ ๊บผ๋ด ์ฒ๋ฆฌํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค. ์ธ๋ฑ์ค ๋ฒํธ๊ฐ ์์ด์ List<E> ๊ฐ์ฒด์ฒ๋ผ for ๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ฝ๋์์ hset1์ string ํ์ ์ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋์ Iterator์ ํ์ ์ <String>์ด ๋๋ค.
hasNext( ) ๋ฉ์๋๋ ๋ค์์ผ๋ก ๊ฐ๋ฆฌํฌ ์์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋ถ๋ฆฌ์ธ์ผ๋ก ๋ฆฌํดํ๋ ๊ฒ์ด๊ณ , ์ด ๊ฐ์ด false์ผ ๋ ๋ง์ง๋ง ๋ฐ์ดํฐ๊น์ง ์ฝ์ ๊ฒ์ด๋ค. next( ) ๋ฉ์๋๋ ๋ค์ ์์ ์์น๋ก ๊ฐ์ ์ฝ์ ๊ฐ์ ๋ฆฌํดํ๋ค.
Iterator<E> ๊ฐ์ฒด๊ฐ ์ฒ์์ ์์ฑ๋๋ฉด ์ฒซ ์์ ๋ฐ๋ก ์ด์ ์ ๊ฐ์ ๊ฐ๋ฆฌํค๊ณ ์๋ค. ๊ทธ๋์ ์ฒซ ๋ฒ์งธ ์์๊ฐ์ ์ฝ์ผ๋ฌ๋ฉด iterator.hasNext๋ฅผ ํด์ผํ๋ค.
• toArray(), toArray(T[] t)
: ๋ฐฐ์ด๋ก ๋ณํํ๋ค.
Object[] objArray = hset1.toArray();
System.out.println(Arrays.toString(objArray)); // [a b c]
Object[] strArray1 = hset1.toArray(new String[0]);
System.out.println(Arrays.toString(strArray1)); // [a b c]
Object[] strArray2 = hset1.toArray(new String[5]);
System.out.println(Arrays.toString(strArray2)); // [a b c null null]
toArray( ) ๋ฉ์๋๋ HashSet<E> ๋ด์ ๋ชจ๋ ์์๋ฅผ ๋ด๋ Object[ ]์ ๋ฆฌํดํ๋ค. HashSet<E>์ ๋ฐ์ดํฐ ๊ฐ์๋ณด๋ค ์์ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋๊ฒจ ์ฃผ๋ฉด ๋ฐ์ดํฐ์ ๊ฐ์๋งํผ ํ์ฅ๋ ๋ฐฐ์ด์ ๋ฆฌํดํ๋ค. ๋ฐ๋๋ก ํฐ ๋ฐฐ์ด์ ๋๊ฒจ์ฃผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด ์์์ ์ฑ์ด ํ ๋ฆฌํดํ๋ค.
• HashSet์ ์ค๋ณต ํ์ธ
HashSet์ ๋ด๋ถ์์ ์ฌ๋ฌ๊ฐ์ ๋ฒํท์ ๊ด๋ฆฌํ๋ค. ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๊ฒ์ํ ๋, ๊ฐ์ฒด์ hashCode( )๋ฅผ ์ด์ฉํด ์ด๋ ๋ฒํท์ ๋ค์ด๊ฐ์ง ๊ฒฐ์ ํ๋ค. ๋ง์ฝ ์ด๋ฏธ ๊ฐ์ ๋ฒํท์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด, hashCode( ) ๊ฐ์ด ๊ฐ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ ๋ค์ equals( ) ๋ฉ์๋๋ฅผ ํตํด ํ์ธํ๋ค. equals๋ ์ค์ ๊ฐ์ด ๊ฐ์์ง ํ์ธํ๋ค. equals() ๋ฉ์๋๊ฐ true๋ฅผ ๋ฆฌํดํ๋ฉด ๋ ๊ฐ์ฒด๋ ๋์ผํ ๊ฐ์ฒด๊ฐ ๋๋ค.
โ๏ธ LinkedHashSet<E>_ 662p
• LinkedHashSet<E>
: HashSet<E>์ ์์ ํด๋์ค๋ก HashSet<E>์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ ๊ฐ์ ์ฐ๊ฒฐ ์ ๋ณด๋ง์ ์ถ๊ฐ๋ก ๊ฐ๊ณ ์๋ ์ปฌ๋ ์ ์ด๋ฉฐ, ์ ๋ ฅ๋ ์์๋ฅผ ๊ธฐ์ตํ๋ค.
Set<String> linkedSet1 = new LinkedHashSet<>();
linkedSet1.add("a");
linkedSet1.add("b");
linkedSet1.add("c");
System.out.println(linkedSet1.toString()); // [a, b, c]
โ๏ธ TreeSet<E>_ 662p
• TreeSet<E>
: ๊ณตํต์ ์ธ Set<E>์ ๊ธฐ๋ฅ์ ํฌ๊ธฐ์ ๋ฐ๋ฅธ ์ ๋ ฌ ๋ฐ ๊ฒ์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ์ปฌ๋ ์ ์ด๋ค.
• TreeSet<E>์ ์ฃผ์ ๋ฉ์๋
๊ตฌ๋ถ | ๋ฆฌํดํ์ | ๋ฉ์๋๋ช | ๊ธฐ๋ฅ |
๋ฐ์ดํฐ ๊ฒ์ |
E | first() | Set ์์ ์ค ๊ฐ์ฅ ์์ ์์๊ฐ ๋ฆฌํด |
E | last() | Set ์์ ์ค ๊ฐ์ฅ ํฐ ์์๊ฐ ๋ฆฌํด | |
E | lower(E element) | ๋งค๊ฐ๋ณ์๋ก ์ ๋ ฅ๋ ์์๋ณด๋ค ์์ ๊ฐ์ฅ ํฐ ์ | |
E | higher(E element) | ๋งค๊ฐ๋ณ์๋ก ์ ๋ ฅ๋ ์์๋ณด๋ค ํฐ ๊ฐ์ฅ ์์ ์ | |
E | floor (E element) | ๋งค๊ฐ๋ณ์๋ก ์ ๋ ฅ๋ ์์๋ณด๋ค ๊ฐ๊ฑฐ๋ ์์ ๊ฐ์ฅ ํฐ์ | |
E | ceiling (E element) | ๋งค๊ฐ๋ณ์๋ก ์ ๋ ฅ๋ ์์๋ณด๋ค ๊ฐ๊ฑฐ๋ ํฐ ๊ฐ์ฅ ์์์ | |
๋ฐ์ดํฐ ๊บผ๋ด๊ธฐ |
E | pollFirst() | Set ์์๋ค ์ค ๊ฐ์ฅ ์์ ์์๊ฐ์ ๊บผ๋ด ๋ฆฌํด |
E | pollLast() | Set ์์๋ค ์ค ๊ฐ์ฅ ํฐ ์์๊ฐ์ ๊บผ๋ด ๋ฆฌํด | |
๋ฐ์ดํฐ ๋ถ๋ถ ์งํฉ ์์ฑ |
SortedSet<E> | headSet(E toElement) | toElement ๋ฏธ๋ง์ธ ๋ชจ๋ ์์๋ก ๊ตฌ์ฑ๋ Set์ ๋ฆฌํด |
NavigableSet<E> | headSet(E toElement, boolean inclusive) | toElement ๋ฏธ๋ง/์ดํ์ธ ๋ชจ๋ ์์๋ก ๊ตฌ์ฑ๋ Set์ ๋ฆฌํด(inclusive=true์ด๋ฉด toElement ํฌํจ, inclusive=false์ด๋ฉด toElement ๋ฏธํฌํจ) | |
SortedSet<E> | tailSet(E fromElement, boolean inclusive) | toElement ์ด์์ธ ๋ชจ๋ ์์๋ก ๊ตฌ์ฑ๋ Set์ ๋ฆฌํด(fromElement ํฌํจ) | |
NabigableSet<E> | tailSet(E fromElement, E toElement) | fromElement ์ด๊ณผ/์ด์์ธ ๋ชจ๋ ์์๋ก ๊ตฌ์ฑ๋ Set์ ๋ฆฌํด(inclusive=true์ด๋ฉด fromElementํฌํจ, inclusive=false์ด๋ฉด fromElement ๋ฏธํฌํจ) | |
SortedSet<E> | subSet(E fromElement, E toElement) | fromElement ์ด์ toElement ๋ฏธ๋ง์ธ ์์๋ค๋ก ์ด๋ค์ง Set์ ๋ฆฌํด(fromElementํฌํจ, toElement ๋ฏธํฌํจ) | |
NavigableSet<E> | subSet(E fromElement, boolean frominclusive, E toElement, boolean toinclusive) | fromElement ์ด๊ณผ/์ด์ toElement ๋ฏธ๋ง/ ์ดํ์ธ ์์๋ค๋ก ์ด๋ค์ง Set์ ๋ฆฌํด(fromclusive=true/false์ด๋ฉด fromElement ํฌํจ/๋ฏธํฌํจ, toinclusive=true/false์ด๋ฉด toElement ํฌํจ/๋ฏธํฌํจ) | |
๋ฐ์ดํฐ ์ ๋ ฌ | NavigableSet<E> | descendingSet() | ๋ด๋ฆผ์ฐจ์์ ์๋ฏธ๊ฐ ์๋๋ผ ํ์ฌ ์ ๋ ฌ ๊ธฐ์ค์ ๋ฐ๋๋ก ๋ณํ |
• TreeSet<E>์์ ๋ฐ์ดํฐ ํฌ๊ธฐ ๋น๊ต
TreeSet<Integer> treeSet1 = new TreeSet<Integer>();
Integer intValue1 = new Integer(20);
Integer intValue2 = new Integer(10);
treeSet1.add(intValue1);
treeSet1.add(intValue2);
System.out.println(treeSet1.toString());
์๋ฐ๊ฐ ์ด๋ฏธ ํด๋ ์ค์ ํฌ๊ธฐ ๋น๊ต ๊ธฐ์ค์ ์์ฑํด ๋์์ ์ฝ๊ฒ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์๋ฐ๊ฐ ์ ํด๋ ๊ธฐ์ค์ผ๋ก ํฌ๊ธฐ๋ฅผ ๋น๊ตํ ์ ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
TreeSet<MyComparableClass> treeSet1 = new TreeSet<MyComparableClass>();
MyComparableClass myComparableClass1 = new MyComparableClass(2, 5);
MyComparableClass myComparableClass2 = new MyComparableClass(3, 3);
treeSet1.add(myComparableClass1);
treeSet1.add(myComparableClass2);
for (MyComparableClass mcc : treeSet1) {
System.out.println(mcc.data1);
}
๋ฐ์ดํฐ๋ค์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ ์ ์์ด, ์์ธ๊ฐ ๋ฐ์ํ๋ค. treeSet<E>์ ์ ์ฅ๋๋ ๋ชจ๋ ๊ฐ์ฒด๋ ํฌ๊ธฐ ๋น๊ต์ ๊ธฐ์ค์ด ์ ๊ณต๋์ด์ผํ๋ค.
ํฌ๊ธฐ ๋น๊ต์ ๊ธฐ์ค์ ์ ๊ณตํ๋ ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์, java.lang ํจํค์ง์ Comparable<T> ์ ๋ค๋ฆญ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด๋ค. CompareTo ๋ฉ์๋๋ ๋ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ์ฌ ํ์ฌ ๊ฐ์ฒด๊ฐ ๋ ์์ผ๋ฉด -1, ๊ฐ์ผ๋ฉด 0, ๋ ํฌ๋ฉด 1์ ๋ฆฌํดํ๋ค.
์์ ์ฝ๋์์ ์ถ๊ฐ๋ 2์ 3์ ๋น๊ตํ๊ณ data1์ ์ ๋ ฌ๋ ๊ฒ์ด๋ค. ๋ ์์ ์์๋ถํฐ ๋ฐฐ์น๋๋ฏ๋ก 2 -> 3 ์์๋ก ๋ฐฐ์น๋ ๊ฒ์ด๋ค.
๋๋ฒ์งธ ๋ฐฉ๋ฒ์ TreeSet<E> ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด์ ์์ฑ์ ๋งค๊ฐ๋ณ์๋ก Comparator<T> ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด๋ค. Comparable<T>๋ ํด๋์ค ๋ด๋ถ์์ ํ ๋ฒ๋ง ์ ๋ ฌ ๊ธฐ์ค ์ง์ ํ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ Comparator<T> ๋ TreeSet ์์ฑ ์ ์ํ๋ ์ ๋ ฌ ๊ธฐ์ค์ ๋ง์๋๋ก ์ง์ ํ ์ ์์ผ๋ฉฐ ์ธ๋ถ์์ ์ถ๊ฐ๋ก ์ค ์ ์๋ค.
'๐ Java > ์๋ฐ์์ ์ ๋ณต' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ปฌ๋ ์ ํ๋ ์์ํฌ ๊ตฌ์กฐ, List<E>์ ArrayList<E>, Vector<E>, LinkedList<E> ์ฐจ์ด์ (1) | 2025.06.18 |
---|---|
[Java] ์ ๋ค๋ฆญ (1) | 2025.05.27 |
[Java] ์ฐ๋ ๋ ๋๊ธฐํ, ์ฐ๋ ๋ ์ํ (0) | 2025.05.26 |
[Java] ์ฐ๋ ๋, ์ฐ๋ ๋์ ์์ฑ, ๋ฐ๋ชฌ์ฐ๋ ๋ (0) | 2025.05.20 |
[Java] ์์ธ์ฒ๋ฆฌ, ์์ธ์ ๊ฐ, ์ฌ์ฉ์ ์ ์ ์์ธ ํด๋์ค (0) | 2025.05.14 |