This simple PR optimizes the observable `ArrayList` creation by using the ArrayList constructor/array size so that the underlying array will be initialized at the correct size which will speed up the creation as the array does not need to grow as a result of the `addAll` call.
I also added tests which will succeed before and after to verify that nothing got broken by this change. Also I made a benchmark test. Results: Old: `ListBenchmark.init thrpt 25 722,842 ± 26,930 ops/s` New: `ListBenchmark.init thrpt 25 29262,274 ± 2088,712 ops/s` <details><summary>Benchmark code</summary> import javafx.collections.FXCollections; import javafx.collections.ObservableList; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.TearDown; import java.util.ArrayList; import java.util.List; @State(Scope.Benchmark) public class ListBenchmark { List<String> strings; @Setup public void setup() { strings = new ArrayList<>(); for(int i = 0; i< 100000;i++) { strings.add("abc: " + i); } } @TearDown public void tearDown() { strings = null; } @Benchmark public ObservableList<String> init() { return FXCollections.observableArrayList(strings); } } </details> ------------- Commit messages: - 8283346: Optimized observable array list creation Changes: https://git.openjdk.java.net/jfx/pull/758/files Webrev: https://webrevs.openjdk.java.net/?repo=jfx&pr=758&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8283346 Stats: 47 lines in 2 files changed: 41 ins; 2 del; 4 mod Patch: https://git.openjdk.java.net/jfx/pull/758.diff Fetch: git fetch https://git.openjdk.java.net/jfx pull/758/head:pull/758 PR: https://git.openjdk.java.net/jfx/pull/758