[英]Sorting an array containing million numbers in Java
這是一個面試問題,我正在尋找專家可以以更好的方式回答...
如何對 Java 中包含百萬個數字的數組進行排序?
謝謝!
面試問題永遠沒有正確答案。 面試官教你問開放式問題,看看你是如何思考和推理問題的。 反過來,您應該展示思考的過程,並證明您可以以“軟件工程方式”進行思考。
像這樣的東西:
如果數字在有限范圍內,請使用 100 萬的 boolean 數組。 這將使 memory sage 降低到 125 mb。 使用索引作為數字和值作為真或假。 取消現有數組,並將其填充為通過 boolean 數組讀取。
我們可以將條目放在NavigableHashMap
中,它以排序的方式保存數據。 因此,在放置鍵時檢查是否已經存在鍵,然后將值增加 1。現在在提取數據時打印鍵值的倍數。 只是在這種情況下,我們只運行一次數組,即 O(N)。
使用 JVM “專家”方式:
Arrays.sort(numberArray);
因為它是整數,並且有一百萬個 - 基數排序,就地排序以及與可用 CPU 一樣多的線程
在數組中存儲數百萬個數據並不是一個好主意。 它可能會導致 MemoryOutOfBounds 異常。 這將導致性能問題。 但是如果你想對數組進行排序
int[] intArray = new int[] {4, 1, 3, -23};
Arrays.sort(intArray);
// [-23, 1, 3, 4]
String[] strArray = new String[] {"z", "a", "C"};
Arrays.sort(strArray);
// [C, a, z]
// Case-insensitive sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
// [a, C, z]
// Reverse-order sort
Arrays.sort(strArray, Collections.reverseOrder());
// [z, a, C]
// Case-insensitive reverse-order sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
Collections.reverse(Arrays.asList(strArray));
// [z, C, a]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.