|
|
2025-10-20 10:02:53에 게시됨
|
|
|
|

.NET 6은 이름에서 알 수 있듯이 일반 큐 위에 우선순위 지원을 추가하는 새로운 컬렉션 타입인 PriorityQueue를 도입했습니다. 참고: 그는스레드 안전 금지스레드 안전 문제에 주의를 기울여야 합니다.
근원:하이퍼링크 로그인이 보입니다.
시작
간단한 사용 예시를 살펴보겠습니다:
예시 출력물:
출력 순서가 우리가 추가한 순서와 반대임을 알 수 있습니다. PriorityQueue는 디큐 시 가장 낮은 우선순위로 시작합니다. 값이 작을수록 우선순위가 높아지고, 우선순위가 높으며, 우선순위가 높을수록 출력도 더 높습니다. 최대 출력을 먼저 원한다면 괜찮은가요? 답은 '예'입니다. 하지만 우선순위 비교 규칙을 명확히 해야 합니다. 다음 예시를 참고할 수 있습니다
장면
우선순위가 있는 자동 정렬을 사용할 때, 자동 정렬이 필요할 때 PriorityQueue를 사용하는 것을 고려할 수 있습니다
메시지 큐
PriorityQueue를 사용하면 우선순위 메시지 큐를 구현할 수 있어, 사용자가 메시지를 보낼 때 우선순위를 지정할 수 있고, 메시지 사용 시 우선순위가 결정됩니다.
위 예시에서는 기본적으로 정수(int)를 우선순위 타입으로 지정하고 일부 메시지를 큐에 병합하지만, 메시지가 여러 개 있고 동일한 우선순위를 가진 상황이 있을 수 있어 이를 활용할 수 있습니다시간과 지능을 연합 우선순위 유형으로 활용합니다다음 예시를 참고할 수 있습니다:
출력의 예는 다음과 같습니다:
위 결과에서 보아, 우선순위의 경우 먼저 메시지를 더 적은 시간 처리하거나, 필요에 따라 정렬 방식을 맞춤화하고 우선순위 비교 로직을 조정할 수 있습니다.
줄
PriorityQueue는 학생 성적 순위 평가와 같은 다양한 순위 매기기에도 활용될 수 있습니다
아래 예제 코드를 살펴보세요:
위 목록은 등급 목록입니다. 몇 가지 테스트 데이터를 작성하면 정렬 전에 데이터를 얻을 수 있고, 큐에 합류하는 순서(Enqueue)도 포함됩니다. 기본 비교는 작은 점수부터 시작한 것으로, 낮은 점수가 먼저입니다. 그 다음에 가장 큰 것부터 작은 것부터 정렬하고 싶습니다. 비교 방법을 맞춤화해야 합니다.
위의 High2LowComparer는 사용자 정의 비교로, 실제로는 결과의 역례이며, 코드는 다음과 같습니다:
위의 출력은 다음과 같습니다:
더
Redis에도 유사한 기능을 할 수 있는 zset(sortedSet) 유형의 데이터가 있지만, zset과 PriorityQueue 사이에는 여전히 몇 가지 차이점이 있습니다. zset은 집합으로, 자동으로 중복을 제거하는 집합이고, PriorityQueue는 여전히 중복 제거되지 않는 큐입니다. zset은 해당 요소의 우선순위(score)를 수정할 수 있지만, PriorityQueue는 현재는 해당 요소의 우선순위를 수정하는 것이 지원되지 않습니다
PriorityQueue는 일부 문제를 해결해 줄 수 있지만, 사용할 때 몇 가지 주의해야 할 점이 있습니다:
- 우선, 우선순위가 같으면 출력 순서가 달라질 수 있는데, 이는 내부 구현 알고리즘에 의해 결정되며 순서를 엄격히 보장할 수 없습니다
- PriorityQueue는 스레드 안전이 아니며, 스레드 안전 문제는 반드시 확인해야 합니다
- PriorityQueue의 Peek 메서드는 큐 내 다가오는 요소만 가져오지만, 큐에서 제거하지는 않습니다
(끝) |
이전의:두우인 몰 크롤러 분석 6신 위치 선, 위험 통제 분석, 이제 7신 X-페르세우스가 되어야 해다음:EBPF 관련 지식 링크
|