Java 1.8: есть ли способ O (1) для объекта в LinkedList <> с помощью remove (object)? - PullRequest
0 голосов
/ 22 октября 2018

Думаю, что нет, поэтому я вручную написал двойной связанный список, отображающий 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().)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...