gpt4 book ai didi

java - 简单的链表和队列同步

转载 作者:行者123 更新时间:2023-12-02 06:32:26 24 4
gpt4 key购买 nike

对于大学作业,我需要实现医院患者等待系统的一部分。该系统使用等待名单上的患者集合,以及在指定时间段(例如今年)注册手术的一组患者。

我已经使用 HashSet 和 LinkedList 实现了如下所需的方法。该方法几乎完全同步,所以我想知道是否有一种更有效的实现,同步更少,或者可能使用锁更细粒度的读写同步?

public Class OperationPeriod {
...
private Set<Patient> registeredPatients=new HashSet<Patient>();
private Collection<Patient> waitingListPatients=new LinkedList<Patient>();
private int capacity;
...

public boolean bookOperation(Patient patient){
if (!Operation.checkHasMetRequirements(patient)) {
return false;
}

//patient could already be registered
synchronized(this) {
if(registeredPatients.contains(patient)) {
return true;
}
if(waitingListPatients.contains(patient) ) {
return false;
}
//Not already registered so register or add to waiting list
return addPatient(patient);
}
}

private boolean addPatient(Patient patient) {
if(registeredPatients.size() < capacity) {
registeredPatients.add(patient);
return true;
}
else {
waitingListPatients.add(patient);
return false;
}
}

最佳答案

这里只有一些代码,但同步看起来不错。

仅供引用,您的 LinkedList.contains 需要 O(n)。我会执行以下操作之一

  1. 使用具有持续查找但保持顺序的LinkedHashSet。但是,根据您稍后的使用情况,这可能并不令人满意。

  2. 使用HashSet来扩充您的LinkedList。使用 LinkedList,除非检查 .contains()

关于java - 简单的链表和队列同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19944054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com