우선 순위가 높은 데이터가 먼저 나옴 (≠ FIFO)
최소 힙 및 최대 힙의 삽입 삭제와 같음
배열, 연결 리스트, 힙
public static void enqueue(LinkedList<Integer> list, int data) {
int idx = list.size();
for (int i = 0; i < list.size(); i++) {
if (list.get(i) > data){
idx = i;
break;
}
}
list.add(idx, data);
}
public static Integer dequeue(LinkedList<Integer> list) {
if (list.size() == 0){
return null;
}
int data = list.get(0);
list.remove(0);
return data;
}
class Person implements Compareable<Person> {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
@Override
public int compareTo(Person o) {
//1 : 변경 x
// -1 : 변경 O
//새롭게 추가하는 데이터가 더 적을 때 변경 ( 적은값이 위로 올가가고 오름차순 정렬)
return this.age >= o.age ? 1 : -1;
//새롭게 추가하는 데이터가 더 클 떄 (큰값이 위로 올라가고 내림차순 정렬)
return this.age >= o.age ? -1 : 1;
}
public static void solution(String[] name, int[] age) {
PriorityQueue<Person> pq = new PriorityQueue<>();
for (int i = 0; i < name.length; i++) {
pq.offer(new Person(name[i], age[i]));
}
System.out.println("== 실체 출력 순서 ==");
while (!pq.isEmpty()){
Person p = pq.poll();
System.out.println(p.name + " " + p.age);
}
}
public static void main(String[] args) {
String[] name = {"A", "B", "C", "D", "E"};
int[] age = {30, 20, 45, 62, 35};
solution(name, age);
}
PriorityQueue<Person> pq2 = new PriorityQueue<>(
(Person p1, Person p2) -> p1.age >= p2.age ? 1 : -1);
for (int i = 0; i < name.length; i++) {
pq2.offer(new Person(name[i], age[i]));
}
while (!pq2.isEmpty()){
Person p = pq2.poll();
System.out.println(p.name + " " + p.age);
}
public static void solution(String[] name, int[] age) {
//오름차순
PriorityQueue<Person2> pq = new PriorityQueue<>((Person2 p1, Person2 p2) -> p1.name.compareTo(p2.name));
//내림차순
PriorityQueue<Person2> pq = new PriorityQueue<>((Person2 p1, Person2 p2) -> p2.name.compareTo(p1.name));
for (int i = 0; i < name.length; i++) {
pq.offer(new Person2(name[i], age[i]));
}
while (!pq.isEmpty()){
Person2 p = pq.poll();
System.out.println(p.name + " " + p.age);
}
}
public static void main(String[] args) {
String[] name = {"A", "B", "C", "D", "E"};
int[] age = {30, 20, 45, 62, 35};
solution(name, age);
}