[ Java ] ์๋ฃ๊ตฌ์กฐ
์๋ฃ๊ตฌ์กฐ
๐ก Iterator
์์(์ธ๋ฑ์ค)๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ ์ ์ฒด๋ฅผ ์ํํด์ฃผ๋ for๋ฌธ๊ณผ ๊ฐ์ ์ญํ ์ ํด์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ ( ์ฌ์ฉ : Set, Collection )
์๋ฃ๊ตฌ์กฐ ์ด๋ฏธ์ง๋ก ํ์ธํด๋ณด๊ธฐ
Data Structure Visualization
www.cs.usfca.edu
1. ์๋ฃ๊ตฌ์กฐ๋?
- ์๋ฃ๊ตฌ์กฐ(data structure)
๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด์ ์ ์ฅํด๋ ๊ฒ
1-1. ์๋ฃ๊ตฌ์กฐ์ ์ข ๋ฅ
- ๋ฆฌ์คํธ(list) : ๋ฐฐ์ด ๋ฆฌ์คํธ(array list), ์ฐ๊ฒฐ ๋ฆฌ์คํธ(linked list)๋ก ์ธ๋ถ๋จ
- ์คํ(stack)
- ํ(queue)
- ํด์ฌ ํ ์ด๋ธ(hashtable)
- ์งํฉ(set) * ์๋ฐํ ๋งํ๋ฉด ์๋ฃ๊ตฌ์กฐ๊ฐ ์๋
์๋ฐ์์ ์๋ฃ๊ตฌ์กฐ - list ,map,set
ํน์ฑ์ ๋ง๊ฒ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํ
2. List
- ์์๊ฐ ์๋ค. ์ค๋ณต์ด ํ์ฉ๋๋ค.
- ์ ํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ๋ฆฌ์คํธ๋ ๋ฐฐ์ด๋ณด๋ค ๋ง์ด ์ฌ์ฉโ
2-1. ArrayList
๐ก ArrayList list = new ArrayList();
< ๋ฐ์ดํฐํ > → ์ฌ๋ด๋ฆญ : ํ์ ํ๋ผ๋ฏธํฐ → ํด๋น ํ์ ๋ง ๋ค์ด๊ฐ ์ ์๊ฒ ์ ์ธํด์ค.
String /Integer/Byte/Short/Long /Char/
๋ฉ์๋ | ์๋ฏธ | ์์ |
add | ๋ฐ์ดํฐ ๊ฐ ์ถ๊ฐ | list.add(”ํฌ๋”) |
์ํ๋ ์ธ๋ฑ์ค์ ๊ฐ ์ถ๊ฐ | list.add(1,”์๋ฐ”); | |
remove | ๋ฐ์ดํฐ ์ญ์ | list.remove(0); |
list.remove(”ํฌ๋”); | ||
set | ๋ฐ์ดํฐ ๊ต์ฒด | list.set(0,”์ค๋ ์ง”); |
get | ๋ฐ์ดํฐ ๊ฐ ์ถ๋ ฅ | list.get(2); |
subList |
ํ์ํ ๋ฐ์ดํฐ๋ง ์ถ์ถ | listNumber.subList(0, 2) |
size | ๋ฐ์ดํฐ ๊ฐฏ์ ์ถ๋ ฅ | list.size(); |
clear | ๋ฐ์ดํฐ ์ ์ฒด ์ญ์ | list.clear(); |
indexOf | ๋ช ๋ฒ์ ์๋์ง | ๋ฌธ์์ด.indexOf(list); |
Collections.sort(๋ฆฌ์คํธ); | ์ค๋ฆ์ฐจ์ ์ ๋ ฌ | Collections.sort(list); |
Iterator listIter = list.iterator(); |
๋ฆฌ์คํธ ๋ฐ์ดํฐ ์ ์ฒด ์ถ๋ ฅ ๋ฐฉ๋ฒ | |
addAll | ๋ฆฌ์คํธ ๋ณํฉ (๋ฆฌ์คํธ + ๋ฆฌ์คํธ) | listNumber.addAll(listNumber2); |
- List ์์ฑ
//1.์ ์ํ ๊ฐ์ฒด๋ง ์ ์ฅ ๊ฐ๋ฅํ ๋ฆฌ์คํธ
ArrayList<Integer> numbers1 = new ArrayList<Integer>();
// 2. ์ด๊ธฐ ์ฉ๋ ์ง์ numbers2
ArrayList<Integer> numbers2 = new ArrayList<Integer>(20);
// 3. ๋ฐฐ์ด์ ๋ฃ์ด์ ์์ฑ
//Arrays.asList(10,20,30) ๋ฐฐ์ด ์์ฑ
ArrayList<Integer> numbers3 = new ArrayList<Integer>(Arrays.asList(10,20,30));
// 4. ๋ค๋ฅธ ์ปฌ๋ ์
์ผ๋ก ๋ถํฐ ๊ทธ๋๋ก ์์๋ฅผ ๋ฐ์์ ์ฌ์ฉ.
ArrayList<Integer> numbers4 = new ArrayList<Integer>(numbers3);
- List ๋ด๋ถ ๋ฉ์๋
List<String> list = new ArrayList<String>();
list.add("์ฌ๊ณผ");
list.add("ํฌ๋");
list.add("์๋ฐ");
//์ถ๋ ฅ๋ฐฉ๋ฒ 1
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("==========================");
//์ถ๋ ฅ ๋ฐฉ๋ฒ2 .Iterator (List,Map,Set)--> ํต์ฉํด์ ์ถ๋ ฅ
Iterator<String> iter = list.iterator(); //Iterator๋ก ๋ฐ์ดํฐํ ๋ณํ
while (iter.hasNext()) { // ์๋ ๊ฐํ์ธ
System.out.println(iter.next());
}
System.out.println(list.subList(0, 2));
//[์ฌ๊ณผ, ํฌ๋]
// ๋์ ํ ๋น
List<Number> listNumber = new ArrayList<Number>();
listNumber.add(10);
listNumber.add(20);
listNumber.add(30);
System.out.println(listNumber.size());
List<Number> listNumber2 = new ArrayList<Number>();
listNumber2.add(60);
listNumber2.add(70);
listNumber2.add(80);
//๋ฆฌ์คํธ ๋ณํฉ = ๋ฆฌ์คํธ + ๋ฆฌ์คํธ
listNumber.addAll(listNumber2);
System.out.println(listNumber.size()); // 6๊ฐ
2-1. ArrayList VS LinkeList
ArrayList(์ ํ ๋ฆฌ์คํธ )
- ์ฐ์ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ
- ๋ด๋ถ์ ์ผ๋ก Object[] ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์์๋ฅผ ์ ์ฅํ๋ค.
- ๋ฐฐ์ด์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ๋น ๋ฅด๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ๋ฐ์ดํฐ ์ ์ฌ๋์ ๋ฐ๋ผ ๊ฐ๋ณ์ ์ผ๋ก ๊ณต๊ฐ์ ๋๋ฆฌ๊ณ ์ค์ธ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ค๊ฐ์ ์ฝ์ /์ญ์ ์ ,๋น๊ณต๊ฐ์ด ์๊ธฐ์ง ์๋๋ก ๋ด๋ถ์์ ์ธ๋ฑ์ค๋ฅผ ์กฐ์ ํ๋ ๊ณผ์ ์ด ์์ด ๋์์ด ๋๋ฆฌ๋ค.
- ์กฐํ๊ธฐ๋ฅ์ ์ ํฉํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ด๋ค. ์ ์ฒด๋ฅผ ์ํํด์ ๋ฐ์ดํฐ ๊ฐ์ ์ถ๋ ฅํ๋ ๊ฒฝ์ฐ. (ex.๊ธ ๋ชฉ๋ก)
LinkeList(์ฐ๊ฒฐ ๋ฆฌ์คํธ)
- ์ด์ , ๋ค์ ๋ฐ์ดํฐ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. (๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ)
- ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์์๋ก ์์ ์ญ์ ๊ฐ ๋ฐ์ํ ์ผ์ด ๋ง์ ๋ ์ฌ์ฉ(๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐํ๋ ๊ตฌ์กฐ) , ์ถ๊ฐํ ์์๋๋ก ๊ฐ์ด ์ ์ฅ(์๋๊ฐ ๋ ๋น ๋ฆ)
- ์ถ๊ฐ/ ์ญ์ ์ ์ฐ๊ฒฐ์ ๋๊ณ ๋ค์ ์ฐ๊ฒฐํ๋ค.
- ๋จ์ ์์์ ์์์ ๋ํ ์ ๊ทผ ์ฑ๋ฅ์ ์ข์ง ์๋ค.
- ๋ฐ์ดํฐ์ ์ ์ฅ ์์๊ฐ ์ ์ง๋๊ณ ์ค๋ณต ํ์ฉ
- ๋ฆฌ์คํธ ์ถ๊ฐ : addFirst(Object),addLast(Object), add(Object), add(index,Object), addAll(Collection c)
- ๋ฆฌ์คํธ ์ ๊ฑฐ : removeFirst(), removeLast(),remove(Object),remove(index)
//๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ์์ฑ์๋ฅผ ์ด์ฉ
LinkedList<Integer> list1 = new LinkedList<Integer>();
LinkedList<Integer> list2 = new LinkedList<Integer>(Arrays.asList(1,2));
LinkedList<String> list3 = new LinkedList<String>(Arrays.asList("J","A","B"));
// addFirst(Object),addLast(Object),
// add(Object), add(index,Object), addAll(Collection c)
System.out.println(list3);
list3.addFirst("R");
System.out.println(list3);
list3.addLast("t");
System.out.println(list3);
// ๋ฐฐ์ด ์ถ๋ ฅํ๊ธฐ
Iterator<String> it = list3.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
3. Set
๐ก TreeSet list = new TreeSet ();
- ์งํฉ์ผ๋ก ์ค๋ณต x
- ์ ์ผํ ๊ฐ๋ค์ ๊ด๋ฆฌํ ๋ ์ฌ์ฉ (ex.์ฃผ๋ฏผ๋ฒํธ)
- ์์๊ฐ ์๋ค. —> get์ ํตํด ๊ฐ์ ธ์ฌ ์ ์๋ค… Iterator๋ฅผ ํตํด์๋ง ๋ฆฌ์คํธ๋ฅผ ๋ฝ์ ์ ์๋ค.
- HashSet, TreeSet
- ์ค๋ฆ์ฐจ์์ผ๋ก ๊ฐ์ ์ ๋ ฌํด ๊ฐ์ง๊ณ ์์ผ๋ฉฐ
- ๋ค๋ฅธ set๋ณด๋ค ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ํจ์ฌ ๋น ๋ฅด๋ค.
๋ฉ์๋ | ์๋ฏธ | ์์ |
add | ๋ฐ์ดํฐ ๊ฐ ์ถ๊ฐ | list.add(”ํฌ๋”) |
System.out.println(list); | ๋ฐ์ดํฐ ์ ์ฒด ์ถ๋ ฅ |
TreeSet<Integer> listTree = new TreeSet<Integer>();
System.out.println("-------------------");
for (int i = 0; i < 6; i++) {
listTree.add((int)(Math.random()*45)+1);
}
System.out.println(listTree);
4. Map
Hashtable(Properties), HashMap, TreeMap
๐ก Map<String, Integer> map = new HashMap<String, Integer>();
- < key, value > ํ ๊ฐ์ ์์ผ๋ก ํํ (ex) ์ด๋ฆ, ์ ํ๋ฒํธ
- ์์๊ฐ ์๋ค.
๋ฉ์๋ | ์๋ฏธ | ์์ |
put | ๋ฐ์ดํฐ ์ถ๊ฐ | map.put("ํ๊ธธ๋" , 01011112222); |
get | ๋ฐ์ดํฐ ๊ฐ ํ์ธ | map.get("ํ๊ธธ๋"); map.get(01011112222); |
contentKey | ๋ฐ์ดํฐ์ ํด๋น key ๊ฐ์ด ์๋์ง ์ฌ๋ถ | contentKey(”ํ๊ธธ๋”) |
contentsValue | ๋ฐ์ดํฐ์ ํด๋น value ๊ฐ์ด ์๋์ง ์ฌ๋ถ | contentsValue(01011112222) |
โ ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ
๋ฐ์ดํฐ ๊ฐ์ ์ถ๋ ฅํ๋ ค๋ฉด Map ๋ฐ์ดํฐ ํ์์ Set ๋๋ Collection ๋ฐ์ดํฐ ํ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค.
์ด๋ set ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ ์ฒด ๊ฐ( .entrySet() )๊ณผ ํค( .keySet() )๊ฐ์ Set ํ์ ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ถ๋ ฅ.
value๊ฐ์ ๋ฉ์๋( .values() )๋ฅผ ์ฌ์ฉํด Collection ํ์ ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ถ๋ ฅํ๋ค.
์์
- ์ ์ฒด ์ถ๋ ฅ key, value→ Iterator ๋ฅผ ํตํด ๊ฐ๊ฐ ์ถ๋ ฅ ๊ฐ๋ฅ
- //์ ์ฒด ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ (key,value) Set set = map.entrySet(); Iterator iter = set.iterator(); //key,value while (iter.hasNext()) { //map์ ์์ value ์ ํค์ ๋ฌถ์ ํ๋ -> ๋ฐ์ดํฐํ์ ์ Map.Entry (.)์ -> ๋ด๋ถ ํด๋์ค , ๋ด๋ถ ์ธํฐํ์ด์ค //Map์ ๋ด๋ถ ํด๋์ค Entry Map.Entry<String, String> e = (Map.Entry<String, String>)iter.next(); System.out.println("key: " + e.getKey() +" , value: " + e.getValue()); }
- Setํ์ ์ผ๋ก ๋ณ๊ฒฝ → entrySet() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฒด๋ฅผ ๋ฝ์ ์ ์๋ค.
- key ๊ฐ ๋ง ์ถ๋ ฅ
Set<String> keyinput = list.keySet(); System.out.println(keyinput);
- Setํ์ ์ผ๋ก ๋ณ๊ฒฝ -> keySet() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ถ ๊ฐ๋ฅ.
- value๊ฐ ๋ง ์ถ๋ ฅ
Collection<Integer> listScore = list.values(); System.out.println(listScore);
- Collection ํ์ ์ผ๋ก ๋ณ๊ฒฝ → values() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ถ ๊ฐ๋ฅ.
Collections
์ต๋๊ฐ→ int max= Collections.max(listScore);
์ต์๊ฐ → int min= Collections.min(listScore);
5. hashtable
๊ฐ์ฅ ์ฒ์ ๋ฃ์ ๊ฒ์ด ๊ฐ์ฅ ๋จผ์ ๋์ค๋๋ก ํ๋ ๊ฒ
6. Stack
๐ก Stack s = new Stack();
FILO(First-In-Last-Out : ์ ์ ํ์ถ)" ํน์ "LIFO(Last-In-First-Out : ํ์ ์ ์ถ์ด๋ผ๊ณ ํ๋ค.
- ๋ง์ง๋ง์ ๋ฃ์ ๊ฒ์ ๊ฐ์ฅ ๋จผ์ ๋์ค๋๋ก ํ๋ ๊ฒ
- ex) ๋ธ๋ผ์ฐ์ ๋ค๋ก๊ฐ๊ธฐ, ์ํ๊ธฐ
๋ช ๋ น์ด | ์๋ฏธ | ์์ |
push | ๋ฐ์ดํฐ ์ถ๊ฐ | list.push(”ํฌ๋”); |
pop | ๋ฐ์ดํฐ ๊ฐ ์ ๊ฑฐ | list.pop(); |
//stack >> push,pop
Stack<Integer> s = new Stack<Integer>(); //stack ์๋ฃ๊ตฌ์กฐ
s.push(1);
s.push(2);
s.push(3);
System.out.println("=========================stack");
while (!s.isEmpty()) { //isEmpty ๋น์ด ์๋์ง ์ ๋น์ด์๋์ง ํ์ธ.
System.out.println(s.pop()); //pop๋ฝ์๋ด๊ธฐ
}
์์ ) ๊ดํธ๊ฐ ์ผ์น/๋ถ์ผ์น ํ๋จ.
- package kosta.data; import java.util.Scanner; import java.util.Stack; public class StackExam { public static void main(String[] args) { // ํค๋ณด๋๋ก๋ถํฐ ์์์ ์ ๋ ฅ //((2+3)+10) ==> ๊ดํธ๊ฐ ์ผ์น/๋ถ์ผ์น ํ๋จ... Scanner sc = new Scanner(System.in); Stack<String> stack = new Stack<String>(); System.out.println("์์ ์ ๋ ฅ : "); String str = sc.nextLine(); try { for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (ch == '(') { stack.push(ch + ""); }else if(ch == ')') { stack.pop(); } } if (stack.isEmpty()) { System.out.println("๊ดํธ๊ฐ ์ผ์น"); }else { System.out.println("๊ดํธ๊ฐ ๋ถ์ผ์น"); } } catch (Exception e) { System.out.println("๊ดํธ๊ฐ ๋ถ์ผ์น"); } } }
Stack ๋ฌธ์
๋ฌธ์
Stack์ "๋๋ฏธ"๋ ๋ป์ ๊ฐ์ง๋ค.
์ฑ ๋๋ฏธ, ์ ๋ฌธ ๋๋ฏธ ๋ฑ์ ์ฌ์ฉํ๋ ๋จ์ด์ด๋ค.
์ฑ ๋๋ฏธ๋ฅผ ์๋ก ๋ค์ด ๋ณด์.
์ฑ ๋๋ฏธ๋ฅผ ์์๋ค๊ณ ํ์ ๋, ์ด ์ฑ ๋๋ฏธ์์ ์ฑ ์ ๊ฐ์ ธ์ค๋ ๊ฐ์ฅ ์ ์์ ์ธ ๋ฐฉ๋ฒ์ ์ ์ผ ์์ ์๋ ์ฑ ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ด๋ค.
๋ค์ ๋งํ๋ฉด ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ ์ฑ ์ ๊ฐ์ฅ ๋์ค์ ๊บผ๋ผ ์ ์์ ๊ฒ์ด๋ค.
์ด๋ฐ์์ผ๋ก ์๋ฃ๊ฐ ๊ฐ์ฅ ๋ฐ์ ์์ด๊ณ (์ ๋ ฅ). ์๋ฃ๋ฅผ ๊ฐ์ ธ์ฌ ๋(์ถ๋ ฅ)๋ ๊ฐ์ฅ ์(์ต๊ทผ)์ ์๋ฃ๋ฅผ ๊ฐ์ ธ์ค๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ Stackํ๊ณ ํ๋ค.
์ด๋ฌํ Stack์ ํน์ง ๋๋ฌธ์ ํํ "FILO(First-In-Last-Out : ์ ์ ํ์ถ)" ํน์ "LIFO(Last-In-First-Out : ํ์ ์ ์ถ)"๋ผ๊ณ ํ๋ค.
๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Stack์ ์ค๊ณํ๊ณ ๋ค์์ ์ฒ๋ฆฌ์กฐ๊ฑด์ ๋ง๋ ์ถ๋ ฅ์ ํ์์ค.
์ฒ๋ฆฌ์กฐ๊ฑด
์ฃผ์ด์ง ๋ช ๋ น์ ๋ค์์ 3๊ฐ์ง์ด๋ค.
1. "i a"๋ a๋ผ๋ ์๋ฅผ ์คํ์ ๋ฃ๋๋ค. ์ด๋, a๋ 10,000 ์ดํ์ ์์ฐ์์ด๋ค.
2. "o"๋ ์คํ์์ ๋ฐ์ดํฐ๋ฅผ ๋นผ๊ณ , ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ์คํ์ด ๋น์ด์์ผ๋ฉด, "empty"๋ฅผ ์ถ๋ ฅํ๋ค.
3. "c"๋ ์คํ์ ์์ฌ์๋ ๋ฐ์ดํฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ
์ฒซ ์ค์ N์ด ์ฃผ์ด์ง๋ค. N์ ์ฃผ์ด์ง๋ ๋ช ๋ น์ ์์ด๋ค. (1≤N≤100)
๋์งธ ์ค๋ถํฐ N+1์ค๊น์ง N๊ฐ์ ๋ช ๋ น์ด ์ฃผ์ด์ง๋๋ฐ, ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ๋ช ๋ น์ ๋ํ ์ถ๋ ฅ ๊ฐ์ ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
์ถ๋ ฅ๋ด์ฉ์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ๋ ์ฃผ์ด์ง์ง ์๋๋ค.
code
package jungolEx.stack;
import java.util.Scanner;
public class stackEx01 {
private static Scanner in;
public static int[] result;
public static void main(String[] args) {
//https://jungol.co.kr/problem/1102
in= new Scanner(System.in);
// ์คํ
int stack1[] = new int[100];
// ์คํ
์ธต - ์์ธ ๋ฐ์ดํฐ ์ ์ฑํฌ
int nIndex =0;
//๋ช
๋ น์ด ์
int n = in.nextInt();
//๋ช
๋ น
String cmd;
in.nextLine(); // ๊ฐํ๋ฌธ์ ์ ๊ฑฐ
for(int i=0; i < n ;i++) {
cmd = in.nextLine();
// insert
if('i' == (cmd.toCharArray()[0])) {
System.out.println("0");
stack1[nIndex++] = cmd.toCharArray()[2];
}
// out
else if("o".equals(cmd)) {
System.out.println("1");
if(nIndex == 0) System.out.println("empty");
else System.out.println( stack1[--nIndex] );
}
//count
else if("c".equals(cmd)) {
System.out.println("2");
System.err.println(nIndex);
}
} // end for
}
}
7. Queue
- ์ ์ ์ ์ถ(FIFO - First In First Out)
- ๊ฐ์ฅ ์ฒ์ ๋ฃ์ ๊ฒ์ด ๊ฐ์ฅ ๋จผ์ ๋์ค๋๋ก ํ๋ ๊ฒ
- ex) ๋ฐฐ๋ฌ ์์คํ
๋ช ๋ น์ด | ์๋ฏธ | ์์ |
offer | ๋ฐ์ดํฐ ์ถ๊ฐ | list.offer(”ํฌ๋”); |
poll | ๋ฐ์ดํฐ ๊ฐ ์ ๊ฑฐ | llist.poll(); |
//Queue >> offer ,poll
LinkedList<Integer> q = new LinkedList<Integer>(); //Queue ์๋ฃ๊ตฌ์กฐ
q.offer(1);
q.offer(2);
q.offer(3);
System.out.println("=========================Queue");
while (!q.isEmpty()) {
System.out.println(q.poll());
}
8. ์ ๋ ฌ(sorting)
List , Set์ ์ธํฐํ์ด์ค๋ก ๋ง๋ค์ด์ง ๋ฐ์ดํฐ ์งํฉ…
ํด๋น ๋ฐ์ดํฐ์ ์ ๋ ฌ์ ๋ณ๊ฒฝํด์ฃผ๊ธฐ ์ํด์๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ ํ์.
Collections.sort(๋ฆฌ์คํธ๋ช ); >> ์ ๋ ฌ
- ๊ธฐ๋ณธ ์ ๋ ฌ ์กฐ๊ฑด : ์ธํฐํ์ด์ค Comparable > compareTo() ์ค๋ฒ๋ผ์ด๋ฉ
package kosta.data; public class Member3 implements Comparable<Member3> { String name; int age; String address;
public Member3(String name, int age, String address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public int compareTo(Member3 o) {
if (age < o.age) {
return -1; // ์์์ง์
}else if(age > o.age){
return 1; // ๋ณํ
}
return 0;
}
}
```
```java
package kosta.data;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MemberMain3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Member3> mlist = new ArrayList<Member3>();
mlist.add(new Member3("๊ธธ๋์ด", 20, "์์ธ"));
mlist.add(new Member3("ํ์จ", 30, "๋จ์์ฃผ"));
mlist.add(new Member3("๋ฐ์จ", 10, "๊ฒฝ๊ธฐ"));
Collections.sort(mlist);
for (Member3 m : mlist) {
System.out.println(m.getAge());
}
}
}
>>๊ฒฐ๊ณผ๊ฐ : ๋ฐ,๊ธธ,ํ
```
- ์ ๋ ฌ๊ธฐ์ค์ ๋ณ๊ฒฝ : ์ธํฐํ์ด์ค Comparator -> compare() ์ค๋ฒ๋ผ์ด๋ฉ.compareTo //์ฌ์ ์ ์ผ๋ก..
//0 -> ์๋ก๊ฐ๋ค
//์์ -> aa.compareTo(BB);
//์์ -> BB.compareTo(aa); //์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ์ ์๊ฒ ๋ณ๊ฒฝ. Collections.sort(mlist, new Comparator<Member3>() { @Override public int compare(Member3 o1, Member3 o2) { if (o1.getName().compareTo(o2.getName()) > 0) { //o1์ด๋ ํฌ๋ค.. return 1; //์๋ฆฌ๋ณ๊ฒฝ }else if(o1.getName().compareTo(o2.getName()) < 0) { //o2์ด๋ ํฌ๋ค.. return -1; } return 0; } }); >> ๊ฒฐ๊ณผ๊ฐ : ๊ธธ , ๋ฐ, ํ