Вы, вероятно, правы, и это просто не очень полезно.
Существует много видов использования связанных списков в теории (в частности, танцевальные ссылки). Но большинство из них связано с хранением и клонированием своих итераторов в другом месте, доступом к содержимому более чем в двух направлениях или разделением и объединением списков. У SplDoublyLinkedList, похоже, не было таких.
Если это не для алгоритмов, одно из них - позволить объекту удалять ссылку на себя в каком-либо списке за постоянное время, освобождая его память и не перетасовывая список (путем хэширования или замены с помощью последнего элемента) после вставки или удаление. Но для этого требуется хранить итератор списка в этих объектах.
Без этих функций они просто ведут себя как два уважения. Если вам нужен только доступ к элементам с помощью итератора, они похожи на два стека. Один из лучших способов в однопоточных простых случаях, запрещающий уже не завернутый в класс, - это просто использовать два стека (возможно, фиксированные массивы или оба конца одного и того же массива). Поп из одного стека и нажимайте его на другой, когда хотите, чтобы итератор перемещался, а верхняя часть одного стека - это текущий элемент. Если вам также нужно получить доступ к голове и хвосту, вам нужно будет заменить стеки на deques.
Но если вы хотите самим реализовать стеки или deques, не зная максимальный размер или даже назначать узлы нормальных связанных списков (на языке без таких библиотек, как в PHP), хороший способ - связать некоторые фиксированные массивы вместе, используя двусвязные списки без этих функций. Как-то вам все еще нужно.
Документация PHP сама по себе, как и Java, предполагает, что они должны быть просто декой, поддерживающей некоторые дополнительные странные функции, а не даже два уровня (я думаю). Не используйте их, если вам действительно нужны дважды связанные списки.
Это лучший ответ здесь, и хороший, чтобы понять цель этих структур данных. Однако все не так просто, как предполагает этот ответ. Основываясь на концепции того, что представляет собой двойной связанный список и какая хэш-таблица (как массивы реализованы в PHP), можно было бы ожидать, что двойной связанный список может сэкономить много памяти по массиву. Однако при тестировании у меня тоже не хватает памяти. Это заставляет меня думать, что дважды связанные списки реализованы очень глупо в PHP. –
Я также попытался создать свой собственный класс связанных групп с острым взглядом на сохранение памяти. Как-то у меня заканчивается память примерно в том же месте, как если бы я использовал обычный PHP-массив, что очень странно. Это заставляет меня подозревать, что внутри PHP использует PHP-массивы в неожиданных местах. Это просто догадка, но не уверен, что еще думать. BTW Я использую PHP 5.3.2, поэтому, надеюсь, более новые версии лучше об этом, но я не знаю. Дело в том, что если вы собираетесь использовать структуру данных, отличную от массива PHP, для повышения производительности, убедитесь, что вы измеряете производительность, чтобы убедиться, что она помогает. –