From 51080e15dee8b00b656807d4e04756a83085c830 Mon Sep 17 00:00:00 2001 From: awoo <17804892+awoo-civ@users.noreply.github.com> Date: Mon, 18 Dec 2023 05:08:26 +0000 Subject: [PATCH 1/3] Potentially improve performance of /jalist The LinkedList of `clickables` will contain as many entries as there are snitches to display, potentially thousands. Then this loop https://github.com/CivMC/CivModCore/blob/master/paper/src/main/java/vg/civcraft/mc/civmodcore/inventory/gui/MultiPageView.java#L47 will call `.get()` on the list ~45 times per each page. Because it's a linked list, each `.get()` will be O(n). Pretty bad. The list never seems to get modified after creation, so there's literally no benefit to use a linked list over an array here, only massive downsides. --- .../java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java b/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java index c8e68240..3bd86da1 100644 --- a/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java +++ b/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java @@ -30,7 +30,7 @@ public SnitchOverviewGUI(Player player, List snitches, String title, boo } private List constructSnitchClickables() { - final List clickables = new LinkedList<>(); + final List clickables = new ArrayList<>(); for (final Snitch snitch : this.snitches) { // Base the snitch icon on the snitch type final var icon = snitch.getType().getItem().clone(); From 66f6033451995702c315e92dfef819797e56b0c1 Mon Sep 17 00:00:00 2001 From: awoo <17804892+awoo-civ@users.noreply.github.com> Date: Mon, 18 Dec 2023 05:16:46 +0000 Subject: [PATCH 2/3] Fix import --- .../java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java b/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java index 3bd86da1..a91089f9 100644 --- a/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java +++ b/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java @@ -2,7 +2,7 @@ import com.untamedears.jukealert.model.Snitch; import com.untamedears.jukealert.model.appender.DormantCullingAppender; -import java.util.LinkedList; +import java.util.ArrayList; import java.util.List; import net.md_5.bungee.api.ChatColor; import org.bukkit.entity.Player; From b5194802c1b2ffb1bc52242938b314115e2be2fc Mon Sep 17 00:00:00 2001 From: awoo <17804892+awoo-civ@users.noreply.github.com> Date: Mon, 18 Dec 2023 17:23:37 +0000 Subject: [PATCH 3/3] Preallocate the array Co-authored-by: okx-code --- .../java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java b/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java index a91089f9..8f5cea53 100644 --- a/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java +++ b/paper/src/main/java/com/untamedears/jukealert/gui/SnitchOverviewGUI.java @@ -30,7 +30,7 @@ public SnitchOverviewGUI(Player player, List snitches, String title, boo } private List constructSnitchClickables() { - final List clickables = new ArrayList<>(); + final List clickables = new ArrayList<>(this.snitches.size()); for (final Snitch snitch : this.snitches) { // Base the snitch icon on the snitch type final var icon = snitch.getType().getItem().clone();