Pourquoi ne pas la classe String en Java mettre en œuvre Itératif?

De nombreux framework Java classes implémentent Iterable, cependant String ne le fait pas. Il fait sens pour itérer sur les personnages dans un String, comme on peut itérer sur les éléments dans un tableau normal.

Est-il une raison pourquoi String ne pas mettre en œuvre Iterable?

  • Considérant que le problème de l'itération à travers la chaîne de caractères char Tableau? (strInput.ToCharArray)
  • Tim: String#toCharArray crée un tableau avec une copie de la Chaîne de caractères. Même si elle travaille, elle impose une surcharge inutile juste pour itérer sur les personnages.
  • Iterator<Character> serait moins de frais généraux???
  • En fonction de la situation Iterator<Personnage> pourrait avoir BEAUCOUP moins de frais généraux que toCharArray
  • Non, je ne pense pas que c'est raisonnable. Un itérateur optimisé pour générer de longues séquences d'un même personnage?
  • Si l'itérateur serait d'utiliser l'autoboxing (par exemple, le Personnage c = 'c'), le code résultant serait d'utiliser des Caractères.valueOf ("c"), qui, selon la Java docs devraient utiliser un cache au lieu de créer de nouvelles instances pour tous les personnages. Dans les Soleils VM, le Caractère instances sont mises en cache pour tous les caractères d'une valeur <= 127.
  • Comme je l'ai dit tout dépend de la situation: Si vous avez une longue chaîne et de l'utilisation de l'agent recenseur pour ne recevoir que quelques entrées, ce serait BEAUCOUP mieux. Extrêmes de l'échantillon: E. g. si vous aviez un 1GO de chaîne et utilisé un agent recenseur pour obtenir les 100 premiers caractères de 100 fois, puis votre aurait fondamentalement de 10 000 accède à l'agent recenseur cas, mais lors de l'utilisation de toCharArray vous aurait 100 exemplaires de la chaîne qui, seule, entraîner 5,000,000,000 accès et vous avez encore besoin de l'itération de sorte qu'il serait de 10 000 vs 5,000,010,000. Assez clair de ce qui est mieux, n'est-ce pas (et oui, c'est la construction d'un cas extrême)

InformationsquelleAutor user333335 | 2010-05-05