Pourquoi switch est plus rapide que si

Beaucoup de Java livres décrivent la switch déclaration comme étant plus rapide que la if else déclaration. Mais je n'ai pas trouver n'importe où pourquoi switch est plus rapide que si.

Exemple

J'ai une situation que je dois choisir un point quelconque de deux. Je peux utiliser soit utiliser

switch (item) {
    case BREAD:
        //eat Bread
        break;
    default:
        //leave the restaurant
}

ou

if (item == BREAD) {
    //eat Bread
} else {
    //leave the restaurant
}

à l'examen du point et du PAIN est une constante de type int valeur.

Dans l'exemple ci-dessus qui est plus rapide dans l'action, et pourquoi?

  • C'est peut-être une réponse aussi pour java: stackoverflow.com/questions/767821/...
  • En général, à partir de Wikipédia: Si la plage de valeurs d'entrée est indéniablement "petits" et a seulement quelques lacunes, certains compilateurs qui intègrent un optimiseur peut effectivement mettre en œuvre l'instruction switch comme une branche de la table ou un tableau de indexés pointeurs de fonction au lieu d'une longue série d'instructions conditionnelles. Cela permet à l'instruction switch pour déterminer instantanément la branche à exécuter sans avoir à passer par une liste de comparaisons.
  • La top réponse à cette question explique assez bien. Ce article explique tout très bien aussi.
  • J'espère que dans la plupart des cas, une optimisation du compilateur serait capable de générer du code qui avait similaire caractéristiques de performance. Dans tous les cas, vous devez appeler plusieurs millions de fois à remarquer la différence.
  • les deux questiona sont différents.
  • comme la réponse suggère que, pour que l'interrupteur on utilise la table de hachage, alors il est sûrement plus rapide, mais utilise additionial de la mémoire, qui, en si ensuite le cas où vous n'utilisez pas toute la mémoire supplémentaire.
  • En fait.... ils ne le sont pas. Et la réponse donne une explication pour pourquoi switch est plus rapide en général.
  • Blé: Il n'en a pas. Je viens de le tester. Il pourrait être bien que certains d'optimisation se fait au moment de l'exécution par JIT, mais ne peut pas prouver que.
  • Kling : la réponse suggère que Si un commutateur contient plus de cinq articles, il est mis en œuvre à l'aide d'une table ou d'un hachage de la liste. Mais si l'interrupteur contient 1 élément comme je l'ai indiqué dans l'exemple
  • Je l'ai dit similaire pour la performance, PAS le même code. Avez-vous référence?
  • Peut-être que vous devriez mentionner explicitement que vous êtes seulement intéressé dans le cas d'un seul élément. Vous le savez, nous avons l'habitude de généraliser/problèmes abstraits. Même si j'ai tendance à dire que dans ce cas précis, vous ne trouverez pas de différences de performances.
  • Kling. Merci Vraiment de votre réponse est utile pour moi.
  • Il faut se méfier de livres que de faire des déclarations comme ça, sans explication/preuve/raisonnement.
  • double possible de qu'est-Ce que la performance relative de la différence de if/else rapport de l'instruction switch en Java?
  • Double Possible de Est-il une différence significative entre l'utilisation de if/else et switch-case en C#?

InformationsquelleAutor | 2011-07-15