C#中如何在队列中每次有元素进队时,将其添加到一个集合(如HashSet)中。在检查元素是否可以进队之前,先检查该元素是否已经在集合中。如果已经在集合中,则不允许再次进队。增加一个集合元素大于一定数量时自动清理
时间: 2024-09-13 12:15:11 浏览: 27
在C#中,你可以使用`Queue<T>`来管理队列,并使用`HashSet<T>`来跟踪已经存在于队列中的元素。为了避免重复添加相同的元素到队列中,你可以先检查`HashSet`中是否已经包含该元素。此外,可以使用`HashSet`的`Remove`方法来移除元素,以此来实现自动清理的功能。
以下是一个简单的示例代码,展示了如何实现这个逻辑:
```csharp
using System;
using System.Collections.Generic;
public class Example
{
private Queue<int> _queue = new Queue<int>();
private HashSet<int> _set = new HashSet<int>();
public void EnqueueItem(int item)
{
if (_set.Contains(item))
{
Console.WriteLine($"Item {item} is already in the queue or set, so it will not be added.");
return;
}
if (_set.Count >= 10) // 假设集合元素大于10时需要清理
{
RemoveOldestItem();
}
_queue.Enqueue(item);
_set.Add(item);
Console.WriteLine($"Item {item} has been successfully added to the queue and set.");
}
private void RemoveOldestItem()
{
if (_queue.Count > 0)
{
int oldestItem = _queue.Dequeue();
_set.Remove(oldestItem);
Console.WriteLine($"Removed the oldest item {oldestItem} from queue and set.");
}
}
}
class Program
{
static void Main()
{
Example example = new Example();
// 测试添加元素
for (int i = 0; i < 15; i++)
{
example.EnqueueItem(i);
}
}
}
```
在这个示例中,每次尝试添加一个新元素到队列之前,会先检查`HashSet`是否已经包含该元素。如果包含,则不执行任何操作并输出一条消息。如果`HashSet`中的元素数量达到10个,则会通过调用`RemoveOldestItem`方法来移除最早添加到队列中的元素。
阅读全文