Si vous avez besoin de hautes performances avec beaucoup de prépensions, vous devrez écrire votre propre version de StringBuilder
(ou utiliser celui de quelqu'un d'autre). Avec la norme StringBuilder
(bien que techniquement cela pourrait être mis en œuvre différemment) l'insertion nécessite de copier les données après le point d'insertion. L'insertion de n morceaux de texte peut prendre O(n^2) temps.
Une approche naïve consisterait à ajouter un décalage dans la sauvegarde. char[]
ainsi que la longueur. Lorsqu'il n'y a pas assez de place pour un prepend, déplacez les données vers le haut plus que ce qui est strictement nécessaire. Cela peut ramener les performances à O(n log n) (je pense). Une approche plus raffinée consiste à rendre le tampon cyclique. De cette façon, l'espace libre aux deux extrémités du tableau devient contigu.