我正在嘗試將int[]長度為 1,000,000的很長轉換為,Integer[]以便我可以使用自定義比較器對其進行排序(根據定義的相應串列的長度對元素進行排序Map<Integer, List<Integer>>)。
我做了以下事情:
private static Integer[] convert(int[] intArray) {
Integer[] ans = new Integer[arr.length];
for (int i = 0; i < arr.length; i ) {
ans[i] = arr[i];
}
return ans;
}
它對我很有效,但我也遇到過
Integer[] ans = Arrays.stream(intArray).boxed().toArray( Integer[]::new );
和
Integer[] ans = IntStream.of(intArray).boxed().toArray( Integer[]::new );
有沒有比其他的要快得多?或者有沒有其他足夠快的方法來縮短運行時間?
uj5u.com熱心網友回復:
有沒有比其他的要快得多?
您意識到您要問的問題類似于:
“我有 500,000 顆螺絲要擰到位。不幸的是,我懶得出去買螺絲刀。我確實有一把爪錘和一只舊鞋。我應該用爪錘將這些東西敲到位,還是鞋子是更好的選擇嗎?”
答案很明確:呃,兩者都不是。請去拿一把螺絲刀。
換句話說,如果轉換為Integer[]第一個的“成本”是某個任意單位的 1000 點成本,那么您列出的選項之間的差異可能在 0.01 和 0.05 點之間 - 即相形見絀,這是無關緊要的。因此,直接回答您的問題?沒關系。
您有 2 個選項:
性能完全無關緊要。在這種情況下,這很好,并且絕對沒有實際回答這個問題的意義。
你非常關心性能。在這種情況下,這個
Integer[]計劃需要被排除在外。
假設您可能對選項 2 感興趣,那么您有多種選擇。
最簡單的方法是享受廣泛的 Java 生態系統。以前有人來過這里,并為此上了一堂出色的課。它抽象了 int 陣列的概念,并為您提供了各種有用的方法,包括排序,并且制作它的團隊非常關心性能,因此他們投入了很多很多很多的人周來進行適當的性能分析(在熱點、流水線 CPU 和當今復雜的作業系統之間,這比您想象的要困難得多!)。
因此,我向您介紹:IntArrayList。它有一個.sortThis()方法,也有一個.sortThis(IntComparator c)方法,您可以將其用于排序目的。
還有一些其他的,在網上搜索“java原始集合”應該可以找到它們,如果由于某種原因優秀的 eclipse 集合專案不符合您的喜好(注意:您不需要 eclipse-the-IDE使用它。它是一個通用庫,恰好由 Eclipse 團隊維護)。
如果您必須手動處理它,在網上搜索如何在 java 中實作快速排序并不難,因此,您可以輕松撰寫自己的“為我排序這個 int 陣列”代碼。并不是說我會重新發明那個特定的輪子。只是指出,如果必須的話,這并不太難。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474471.html
上一篇:mysql按年份搜索范圍
