Heim >Java >javaLernprogramm >Der Effizienzunterschied zwischen der Verwendung von Konstruktoren und der Verwendung von Settern in Java
Versuchen Sie beim Optimieren von Java-Code alle Möglichkeiten, die Gesamteffizienz zu verbessern. Verwenden Sie JProfiler, um den Zeitanteil des Codes zu überprüfen und dann zu sehen, welche Teile optimiert werden können, um die Laufzeit zu reduzieren. Nachfolgend finden Sie mehrere Richtungen.
1. Wenn Sie den Konstruktor verwenden können, um es in einem Schritt richtig zu machen, versuchen Sie, den Konstruktor zu verwenden, anstatt Setter-Funktionen einzeln zu verwenden >2. Wenn Sie das Array verwenden können, verwenden Sie einfach ein Array. Anstelle von Listen sind Arrays wirklich schnell.
3. Wenn Sie eine for-Schleife verwenden, verwenden Sie die for i-Schleife für die Sammlung von Listenschnittstellen anstelle der for every-Schleife. Wenn die for i-Schleife ausgeführt wird, wird der Längenwert außerhalb der for-Schleife angegeben.
4. Einige Variablen können einmal extrahiert und mehrmals verwendet werden. Komme nicht häufig vor. Sogar ein einfacher int-Wert.
5. Wenn Sie interne Klassen verwenden können, können Sie interne Klassen verwenden, wodurch die Verwendung von Getter- und Setter-Methoden eingespart werden kann.
6. Sagen Sie für die JSON-Serialisierung und -Deserialisierung nicht, dass FastJson theoretisch schneller ist, sondern verwenden Sie einfach FastJSON, da Sie basierend auf der Einfachheit und Komplexität der Datenstruktur auswählen müssen, welche Deserialisierung und Deserialisierung verwendet werden soll . Sie müssen es tatsächlich testen, bevor Sie sprechen. Man kann die Theorie nicht einfach direkt kopieren, denn manchmal ist Gson wirklich schnell.
Das Folgende ist ein Vergleich der Effizienz dieses Konstrukts und dieser Menge
Dann ist der verwendete Code wie folgt folgt: 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));
}
}
Sie können feststellen, dass die Konstruktion viel schneller ist, als sie einzeln festzulegen. Wenn Sie daher den Wert des Attributs in einem Schritt festlegen können, sollten Sie dies unter Berücksichtigung des Effizienzproblems tun Mach es so
( 2019-07-16 Neu hinzugefügt)
Hat nicht jemand etwas über den Builder-Modus gesagt?
Ich war neugierig und habe es getestet, nur für den Fall, dass dieser Builder-Modus schneller ist.
Im Folgenden wird der Builder-Code /**
* 使用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();
}
Annotationen von Lombok verwendet. Dann die JProfiler-Überwachungsergebnisse
Das Ergebnis:Wie Sie sehen können, ist es immer noch ein Konstruktorfunktion. Außerdem ist das obige Verhältnis: 72,6: 27,4 = 33: 12,4 = 2,64
Das Zeitverhältnis zwischen Konstruktion und Satz hat sich nicht geändert.
Das obige ist der detaillierte Inhalt vonDer Effizienzunterschied zwischen der Verwendung von Konstruktoren und der Verwendung von Settern in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!