Vous avez probablement raison, et il est tout simplement pas très utile.
Il y a plusieurs utilisations des listes chaînées en théorie (notamment les liens dansants). Mais la plupart d'entre elles implique soit le stockage et le clonage de ses itérateurs ailleurs, l'accès au contenu dans plus de deux directions, soit la division et la fusion des listes. SplDoublyLinkedList semblait ne pas avoir ceux-ci. Si ce n'est pas pour des algorithmes, une utilisation est de permettre à un objet de supprimer la référence de lui-même dans une liste à temps constant, libérant sa mémoire et sans mélanger la liste (en hachant ou en échangeant avec le dernier élément) après l'insertion ou suppression. Mais cela nécessite de stocker un itérateur de la liste dans ces objets.
Sans ces fonctionnalités, ils se comportent comme deux deques. Si vous avez seulement besoin d'accéder à des éléments en utilisant l'itérateur, ils sont comme deux piles. Un meilleur moyen dans les cas simples simples, à moins d'être déjà enveloppés dans une classe, consiste simplement à utiliser deux piles (peut-être des tableaux fixes, ou les deux extrémités du même tableau). Passez d'une pile à une autre et poussez-la sur une autre à chaque fois que vous voulez que l'itérateur bouge, et le haut d'une pile est l'élément courant. Si vous devez également accéder à la tête et à la queue, vous devrez remplacer les piles par des deques. Mais si vous voulez implémenter des piles ou les déduire sans connaître la taille maximum, ou même allouer des nœuds de listes chaînées normales (dans une langue sans ces bibliothèques comme en PHP), le bon moyen est de chaîner des tableaux fixes ensemble, en utilisant des listes doublement chaînées sans ces fonctionnalités. D'une certaine manière, vous en aurez toujours besoin. La documentation PHP elle-même, comme celle de Java, suggère qu'ils sont supposés être juste une deque supportant des fonctionnalités bizarres, pas même deux deques (je pense). Ne les utilisez pas si vous avez vraiment besoin de listes doublement chaînées.
Ceci est la meilleure réponse ici, et une bonne pour comprendre le but de ces structures de données. Cependant, les choses ne sont pas aussi simples que cette réponse l'indique. Juste basé sur le concept de ce qu'est une double liste chaînée et ce qu'est une table de hachage (comment les tableaux sont implémentés en PHP), on pourrait s'attendre à ce qu'une double liste chaînée puisse économiser beaucoup de mémoire sur un tableau. Cependant, dans mes tests, je n'ai plus de mémoire à peu près sur place. Ce qui m'amène à croire que les listes doublement chaînées sont implémentées très bêtement en PHP. –
J'ai aussi essayé de créer ma propre classe de liste à lien unique avec un souci de conserver la mémoire. Quelque part, je manque de mémoire à peu près au même endroit que si j'utilisais un tableau PHP normal, ce qui est très bizarre. Cela m'amène à soupçonner que les internes de PHP utilisent des tableaux PHP dans des endroits inattendus. C'est juste une supposition, mais je ne sais pas quoi d'autre à penser. BTW J'utilise PHP 5.3.2, alors j'espère que les nouvelles versions sont mieux à ce sujet, mais je ne sais pas. Le point est, si vous allez utiliser une structure de données autre que le tableau PHP pour des raisons de performances, assurez-vous de mesurer la performance pour vous assurer que cela aide. –