Il existe deux méthodes: et je les teste comme celui-ci dans la méthode principale: p> intuitivement, je pense que Mais le fait est, à l'aide du motif pré-construit est S'il vous plaît quelqu'un peut-il me dire pourquoi cela se produit? p> p> String.Split CODE> Airez éventuellement Pattern.comPILE.Split CODE> (après beaucoup de travail supplémentaire) pour faire la vraie chose. Je peux construire l'objet modèle à l'avance (il est sûr de sécurité) et accélérez le fractionnement. P> string.split code> directement. J'ai essayé une chaîne de 50 caractères sur eux (en utilisant Myeclipse), l'appel direct ne consomme que la moitié du temps d'utilisation d'un objet de motif pré-construit. P>
3 Réponses :
Je pense que cela ne peut être expliqué que par l'optimisation JIT, String.Split en interne est implémenté comme suit:
for (int i = 0; i < 300000; i++) {
//base.split("\\.");// switch to patternSplit to see the difference
//p.split(base);
Pattern.compile("\\.").split(base, 0);
}
Cela peut dépendre de la mise en œuvre réelle de Java. J'utilise OpenJDK 7, et ici, voir ici pour le code source, ligne 2312. p> comme vous le scindez par string.split code> invoque effectivement motif.comple (regex) .split (ceci, limite) code>, mais seulement si em> la chaîne à scinder par, regex code>, est plus qu'un seul caractère. "\\." code>, il utilise le "chemin rapide". C'est-à-dire que si em> vous utilisez openjdk. P> p>
Mais \\. Code> est en fait une chaîne de deux caractères, je me trompe?
@ SP00M Voir le commentaire: "(2) Two-Char String et le premier caractère correspond au backslash et le second n'est pas la lettre ASCII DIGIT ou ASCII."
Ma faute, tu as raison, qui a été réellement mise en œuvre dans le groupe d'autres contrôles et beaucoup de code de bas niveau i> :)
Jetez un coup d'œil à la source. Il fait i> appelle
motif.comple (regex) .split (ceci, limite) code>, mais uniquement si la chaîne à scinder est plus qu'un seul caractère. Au moins dans OpenJDK7, voir ici , ligne 2312 .@Tobias_k drôle, vous êtes le seul à signaler ce détail crucial ... dans un commentaire, où tous les autres gens écrivent plutôt des réponses incomplètes.
Réponse lâchée - Stackoverflow.com/a/26159501/2182928