Думаю, что нет, поэтому я вручную написал двойной связанный список, отображающий iOrderID в Order, и поддержал его с помощью HashMap.Я использую HashMap, чтобы найти заказ, и когда я это сделаю, я могу мгновенно снять с него связь.
class Order {
Product product;
Order orderPrev, orderNext;
// The business fields I need are here.
}
Map<Integer, Order> maporder = new HashMap<>();
Затем удалить:
void Delete( int iOrderID ) {
Order order = maporder.get( iOrderID );
if ( order == null ) {
LogError( "order not found" );
return false;
}
maporder.remove( order.iOrderID );
if ( orderPrev != null ) {
orderPrev.orderNext = orderNext;
} else {
product.orderHead = orderNext;
}
if ( orderNext != null ) {
orderNext.orderPrev = orderPrev;
} else {
product.orderTail = orderPrev;
}
(Обратите внимание, что, как и в верхней частиНа 20 страницах, которые вы найдете в Google и суммируете O () для различных опций, сообщается remove()
как O (1), но я уверен, что все они говорят о removeFirst()
и, возможно, removeLast()
.)