Verwenden Sie nach dem Lesen des Artikels Mechanismen und Merkmale der in Java häufig verwendeten Collection-Implementierungsklassen ArrayList, um den Mechanismus zu implementieren, den Sie erstellen möchten. Ich habe mich gefragt, welche der verknüpften Listen besser ist, daher schreibe ich das Ergebnis der Überprüfung der Berechnungszeit.
Was ich versucht habe, war ein "Routenarray".
Suchen Sie nach dem Sichern der Sequenz nach den Elementen im Pfad und extrahieren Sie den kleinsten Wert aus dem Bereich, der die Bedingungen erfüllt (z. B. den Bereich, der nur bestimmt werden kann, wenn die gesamte Sequenz bestimmt ist, z. B. die 10 Zahlen in der Mitte des Arrays). Ich ziele.
Betrachten Sie auf der Grundlage des oben Gesagten die zu verwendende Klasse.
-Überprüfen Sie die Geschwindigkeit der Elementsuche von linkedList nach dem Erstellen eines Arrays.
-Wenn die Berechnungsgeschwindigkeit langsam ist, vergleichen Sie sie mit der Array-Additionsgeschwindigkeit von Arraylist.
-Wenn die Berechnungsgeschwindigkeit toleriert werden kann, implementieren Sie sie mithilfe der verknüpften Liste.
Daher wird der folgende Code zum Vergleich mit der for-Anweisung und der erweiterten for-Anweisung verwendet.
test.java
import java.util.LinkedList;
import java.util.Iterator;
public class test {
static final int LIMIT = 100_000;
static LinkedList<Integer> array = new LinkedList<Integer>();
static long sum = 0;
static {
for (int i = 0; i < LIMIT; i++) {
array.addLast(i);
}
}
static void addArrayNumbersWithFor() {
sum = 0L;
for (int i = 0; i < LIMIT; i++) {
sum += array.get(i);
}
}
static void addArrayNumbersWithAppliedFor() {
sum = 0L;
for (int value : array) {
sum += value;
}
}
static double measureCalculationTimeWithFor() {
//Startzeit in Millisekunden
long ts1 = System.currentTimeMillis();
//Ausführung verarbeiten
addArrayNumbersWithFor();
//Holen Sie sich die Endzeit in Millisekunden
long te1 = System.currentTimeMillis();
//Verarbeitungszeit Millisekunde
long tmsec1 = te1 - ts1;
//Verarbeitungszeit Sekunden
double tsec1 = (double) tmsec1 / 1000.0;
System.out.println(sum);
return tsec1;
}
static double measureCalculationTimeWithAppliedFor() {
//Startzeit in Millisekunden
long ts1 = System.currentTimeMillis();
//Ausführung verarbeiten
addArrayNumbersWithAppliedFor();
//Holen Sie sich die Endzeit in Millisekunden
long te1 = System.currentTimeMillis();
//Verarbeitungszeit Millisekunde
long tmsec1 = te1 - ts1;
//Verarbeitungszeit Sekunden
double tsec1 = (double) tmsec1 / 1000.0;
System.out.println(sum);
return tsec1;
}
public static void main(String[] args) {
System.out.println(test.measureCalculationTimeWithAppliedFor());
System.out.println(test.measureCalculationTimeWithFor());
}
}
Wenn aus diesem Ergebnis eine einfache for-Anweisung verwendet wird, werden die Elemente immer in der Reihenfolge vom ersten Element in der Schleife erfasst, während im Fall der erweiterten for-Anweisung die Informationen des nächsten Elements vom vorherigen Element erhalten werden. Es ist ersichtlich, dass es erfasst wird und das nächste Element erfasst wird.
Wenn Sie einem Array nacheinander Elemente hinzufügen möchten und nicht wissen, wie viele Elemente hinzugefügt werden sollen, sollten Sie die verknüpfte Liste verwenden. Der Engpass ist die langsame Geschwindigkeit des Direktzugriffs, aber es ist ersichtlich, dass es keine langsame Geschwindigkeit gibt, da die Elemente von Anfang an in der Reihenfolge erfasst werden, indem die erweiterte for-Anweisung verwendet wird. Ich habe es nicht mit einem normalen Array verglichen, aber es basiert auf der Annahme, dass der Sammlungstyp verwendet wird.
Recommended Posts