Maison> Java> javaDidacticiel> le corps du texte

La différence d'efficacité entre l'utilisation de constructeurs et l'utilisation de setters en Java

(*-*)浩
Libérer: 2019-08-09 16:31:50
avant
3310 Les gens l'ont consulté

Lors de l'optimisation du code Java, essayez tous les moyens pour améliorer l'efficacité globale. Utilisez JProfiler pour examiner la proportion de temps du code, puis voyez quelles parties peuvent être optimisées pour réduire le temps d'exécution. Il y a plusieurs directions ci-dessous.

La différence d'efficacité entre l'utilisation de constructeurs et l'utilisation de setters en Java

1. Si vous pouvez utiliser le constructeur pour réussir en une seule étape, essayez d'utiliser le constructeur au lieu d'utiliser les fonctions de définition une par une

2. Si vous pouvez utiliser le tableau, utilisez simplement un tableau. Au lieu de listes, les tableaux sont très rapides.

3. Lorsque vous utilisez une boucle for, utilisez la boucle for i pour la collection d'interfaces de liste au lieu de la boucle for each. Lorsque la boucle for i est exécutée, la valeur de longueur est mentionnée en dehors de la boucle for.

4. Certaines variables peuvent être extraites une fois et utilisées plusieurs fois. Ne recevez pas fréquemment. Même une simple valeur int.

5. Si vous pouvez utiliser des classes internes, vous pouvez utiliser des classes internes, ce qui peut économiser l'utilisation des méthodes getter et setter.

6. Pour la sérialisation et la désérialisation json, ne dites pas que fastjson est plus rapide en théorie, utilisez simplement fastjson, car en fonction de la simplicité et de la complexité de la structure des données, vous devez choisir la désérialisation et la désérialisation à utiliser. . Vous devez réellement le tester avant de parler. Vous ne pouvez pas simplement copier la théorie directement, car parfois Gson est très rapide.

Ce qui suit est une comparaison de l'efficacité de cette construction et de cet ensemble

La différence defficacité entre lutilisation de constructeurs et lutilisation de setters en JavaEnsuite, le code utilisé est le suivant suit :

package com.lxk.fast; import com.google.common.collect.Lists; import com.lxk.model.Car; import com.lxk.model.Dog; /** * 测试谁快 直接构造或者一个个set,他们的效率差多少 * * @author LiXuekai on 2019/6/18 */ public class FastIsConstructOrSet { public static void main(String[] args) { testFast(); } /** * 使用JProfiler看时间占比 */ private static void testFast() { while (true) { //27.4% set(); //72.6% construct(); } } /** * 构造函数来给属性赋值 */ private static void construct() { Car car = new Car("oooo", 100, Lists.newArrayList(new Dog("aaa", true, true))); } /** * set来给属性赋值 */ private static void set() { Car car = new Car(); car.setSign("oooo"); car.setPrice(100); Dog dog = new Dog(); dog.setName("aaa"); dog.setAlive(true); dog.setLoyal(true); car.setMyDog(Lists.newArrayList(dog)); } }
Copier après la connexion
Vous pouvez constater que la construction est beaucoup plus rapide que de la définir un par un. Par conséquent, lorsque vous pouvez définir la valeur de l'attribut en une seule étape, compte tenu du problème d'efficacité, vous devriez le faire. fais-le comme ça

( 2019-07-16 nouvellement ajouté)

Un vieil homme n'a-t-il pas parlé du mode constructeur ?

J'étais curieux alors je l'ai testé, juste au cas où ce mode constructeur serait plus rapide.

Ce qui suit est le code du constructeur

/** * 使用JProfiler看时间占比 */ @Test public void testFast2() { while (true) { //33% set(); //12.4% construct(); //54.6% builder(); } } /** * 使用lombok的 builder 模式来赋值 */ private static void builder() { Car car = Car.builder() .sign("0000") .price(100) .myDog(Lists.newArrayList(Dog.builder().name("aaa").alive(true).isLoyal(true).build())) .build(); }
Copier après la connexion

La différence defficacité entre lutilisation de constructeurs et lutilisation de setters en JavaLes annotations de Lombok utilisées.La différence defficacité entre lutilisation de constructeurs et lutilisation de setters en Java

Puis les résultats du suivi de JProfiler

La différence defficacité entre lutilisation de constructeurs et lutilisation de setters en Java

Le résultat :

Comme vous pouvez le voir, le constructeur est toujours génial, il est toujours plus rapide. De plus, le ratio ci-dessus : 72,6 : 27,4 = 33 : 12,4 = 2,64

Le rapport de temps entre la construction et le set n'a pas changé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!