๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/JAVA

[Java] 17์ผ์ฐจ : ์ปฌ๋ ‰์…˜(Collection) - 4

by ๋”ฐ๊ถˆ 2024. 3. 11.

 

 

 

Queue<E> ์ธํ„ฐํŽ˜์ด์Šค

  • ํ(Queue)๋Š” ์„ ์ž…์„ ์ถœ ๊ตฌ์กฐ๋กœ ๋จผ์ € ์ž…๋ ฅ๋œ ์ž๋ฃŒ๋ฅผ ๋จผ์ € ์ถœ๋ ฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • Queue ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋Š” ํ์™€ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์ค‘๋ณต์ ์ธ ์š”์†Œ๋ฅผ ์ €์žฅ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Queue<String>que = new LinkedList<>();
  • Deque ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ArrayDeque ํด๋ž˜์Šค๋Š” ์Šคํƒ ๋ฐ ํ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋กœ, Stack ํด๋ž˜์Šค๋‚˜ ๋ผˆ๋Ž“fmf rngusgks LinkedList ํด๋ž˜์Šค ๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

 

 

 

PriorityQueue<E> ํด๋ž˜์Šค

 

  • ์ผ๋ฐ˜์ ์ธ ํ๋Š” FIFO ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ PriorityQueue(์šฐ์„ ์ˆœ์œ„ ํ)๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ ๋“ค์–ด์˜จ ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด ๊ทธ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋จผ์ € ์ถœ๋ ฅํ•˜๋Š” ํ์ด๋‹ค.

 

package ch11.unit06;

import java.util.LinkedList;
import java.util.Queue;

public class Ex01 {
	
	public static void main(String[] args) {
		Queue<String> q = new LinkedList<String>();
		
		q.offer("์ž๋ฐ”");
		q.offer("์˜ค๋ผํด");
		q.offer("HTML");
		q.offer("์„œ๋ธ”๋ฆฟ");
		
		System.out.println(q);
		
		// peek() : head ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด null
		// poll() : head ๋ฐ˜ํ™˜ํ›„ ์‚ญ์ œ 
		
		while(q.peek() != null) {
			String s = q.poll();
			System.out.println(s);
		}
		
		System.out.println();
	}
}

 

 

package ch11.unit06;

import java.util.concurrent.PriorityBlockingQueue;

public class Ex02 {

	public static void main(String[] args) {
		
		//์šฐ์„ ์ˆœ์œ„ ํ : Comparable ๊ตฌํ˜„ ํด๋ž˜์Šค๋งŒ ๊ฐ€๋Šฅ
		//๋จผ์ € ์ƒ์„ฑ๋œ ํฌ์ธํ„ฐ ์‚ฌ์šฉ ๋“ฑ์—์„œ ์ด์šฉ 
		PriorityBlockingQueue<String> q = new PriorityBlockingQueue<String>();
		
		q.offer("์ž๋ฐ”");
		q.offer("์˜ค๋ผํด");
		q.offer("HTML");
		q.offer("์„œ๋ธ”๋ฆฟ");
		
		System.out.println(q);
		
		// peek() : head ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด null
		// poll() : head ๋ฐ˜ํ™˜ํ›„ ์‚ญ์ œ 
		
		while(q.peek() != null) {
			String s = q.poll();
			System.out.println(s);
		}
		
		System.out.println();
	}
	}

 

 

 

 

Collections ํด๋ž˜์Šค

  • ์ปฌ๋ ‰์…˜์˜ ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ํด๋ž˜์Šค
  • ์ •๋ ฌ,๊ฒ€์ƒ‰,์„ž๊ธฐ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณต
  • ์ด ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ์— ์ œ๊ณต๋˜๋Š” ์ปฌ๋ ‰์…˜ ๋˜๋Š” ํด๋ž˜์Šค ๊ฐ์ฒด๊ฐ€ null์˜ ๊ฒฝ์šฐ, NullPointerException ์˜ˆ์™ธ ๋ฐœ์ƒ

 

Comparable<T> ์ธํ„ฐํŽ˜์ด์Šค

  • ๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ์ธ compareTO() ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.
  • ์ž๋ฐ”๋Š” ๊ฐ™์€ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์„œ๋กœ ๋น„๊ตํ•ด์•ผ ํ•˜๋Š” ํด๋ž˜์Šค๋“ค์€ ๋ชจ๋‘ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.
  • Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋Š” Collections.sort()๋ฉ”์†Œ๋“œ๋‚˜ Arrays.sort()์— ์˜ํ•ด์„œ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋Š” Collections.binarySearch() ๋ฉ”์†Œ๋“œ๋กœ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•˜๋‹ค. 
  • Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋Š” TreeSet ์š”์†Œ๋กœ ์ €์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ, TreeMapํด๋ž˜์Šค์˜ ํ‚ค๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

Comparator<T> ์ธํ„ฐํŽ˜์ด์Šค

  • Comparator ์ธํ„ฐํŽ˜์ด์Šค๋Š” Comparable ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฐ™์ด ๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
  • Comparator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์—์„œ๋Š” compare() ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜์—ฌ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•œ๋‹ค.
  • Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์€ List์˜ ์š”์†Œ๋ฅผ Collections.sort() ๋ฉ”์†Œ๋“œ๋กœ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” sort(List<T>list, Comparator<? super T>c)์˜ ๋‘๋ฒˆ์งธ ์ธ์ˆ˜์— Comparator๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 

 

package ch11.unit06;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Ex03_Sort {

	public static void main(String[] args) {
		List<User3> list = new ArrayList<User3>();
		
		list.add(new User3("ํ™๊ธธ๋™", 23));
		list.add(new User3("์ด๊ธฐ์ž", 24));
		list.add(new User3("๊น€์ž๋ฐ”", 22));
		list.add(new User3("๋‹ค์ž๋ฐ”", 23));
		list.add(new User3("๋„ˆ์ž๋ฐ”", 21));
		
		Collections.sort(list);
		
		for(User3 vo : list) {
			System.out.println(vo.getName()+": "+vo.getAge());
		}
		
	}

}
class User3 implements Comparable<User3>{
	private String name;
	private int age;
	
	public User3() {
		
	}
	
	public User3(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	
	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;
	}

	
	// compareTo():Comparble ๋ฉ”์†Œ๋“œ๋กœ ์ •๋ ฌ ๊ธฐ์ค€์„ ์„ค์ • ํ•œ๋‹ค. 
	@Override
	public int compareTo(User3 o) {

		//return name.compareTo(o.getName()); // ์ด๋ฆ„ ์˜ค๋ฆ„์ฐจ 
		//return -name.compareTo(o.getName()); // ์ด๋ฆ„ ๋‚ด๋ฆผ์ฐจ
		//return age - o.getAge(); // ๋‚˜์ด ์˜ค๋ฆ„์ฐจ์ˆœ
		return -(age - o.getAge()); // ๋‚˜์ด ๋‚ด๋ฆผ์ฐจ์ˆœ
		
		
	}
	
	
}

 

 

 

package ch11.unit06;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Ex03 {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		
		list.add("java");
		list.add("spring");
		list.add("html");
		list.add("css");
		list.add("javascript");
		System.out.println(list);
		
		Collections.shuffle(list);
		System.out.println(list);
	}

}

package ch11.unit07;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Ex02 {

	public static void main(String[] args) {
		
		List<String> list = new ArrayList<String>();
		
		list.add("์„œ์šธ");
		list.add("๋ถ€์‚ฐ");
		list.add("๋Œ€๊ตฌ");
		list.add("์ธ์ฒœ");
		list.add("๊ด‘์ฃผ");
		list.add("๋Œ€์ „");
		list.add("์šธ์‚ฐ");
		list.add("์„ธ์ข…");
		System.out.println(list);
		
		Collections.sort(list);
		System.out.println(list);
	
	
	//์ด๋ถ„๊ฒ€์ƒ‰(์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ๊ฐ€๋Šฅ)
	int n = Collections.binarySearch(list, "์„œ์šธ");
	System.out.println("์„œ์šธ์œ„์น˜:"+n);
	
	Collections.sort(list, Collections.reverseOrder());
	System.out.println(list);
	
	}

}