是否可以在给定的示例中实现一条记录的搜索和删除?
有必要实现一个基于列表的队列,使用组合算法来服务它。然后演示队列元素的基本操作性能:搜索、添加、删除。
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Random;
public class test {
public static void main(String[] args) {
//Компаратор
Queue<Customer> customerPriorityQueue = new PriorityQueue<>(7, idComparator);
add(customerPriorityQueue);
poll(customerPriorityQueue);
}
//Класс компаратора
public static Comparator<Customer> idComparator = new Comparator<Customer>(){
@Override
public int compare(Customer c1, Customer c2) {
return (int) (c1.getId() - c2.getId());
}
};
//Метод добавления элементов в очередь
private static void add(Queue<Customer> customerPriorityQueue) {
Random rand = new Random();
for(int i=0; i<7; i++){
int id = rand.nextInt(100);
customerPriorityQueue.add(new Customer(id, "Name "+id));
}
}
//Метод для обработки данных очереди
private static void poll(Queue<Customer> customerPriorityQueue) {
while(true){
Customer cust = customerPriorityQueue.poll();
if(cust == null) break;
System.out.println("Обработка клиента с id=" + cust.getId() + " \\\\ " + cust.getName());
}
}
}
class Customer {
private int id;
private String name;
public Customer(int i, String n){
this.id=i;
this.name=n;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}
我没有发布完整的答案。只是一个想法。
我想你明白优先队列和堆是一回事了。在任何情况下,您都必须在标准类(或堆或队列)上编写自己的包装器,这是个人喜好问题,我更喜欢堆,以免延迟不必要方法的执行。
删除操作的复杂度为 O(1)(如果哈希是容器,则为 O(ln K))。剩下的操作是 O(ln K),其中 K 是队列中元素的最大数量(取决于比较器的实现)。