2015-04-23 60 views
0

我想排序超大的字符串數組的電子郵件。當我沒有事先填充超大數組時,我得到一個nullPointerException。當我用空字符串填充數組時,我的代碼按字母順序對電子郵件列表進行排序,但將排序後的電子郵件列表放在空字符串後面。如何對電子郵件列表進行排序,以便首先在數組中按字母順序列出電子郵件,然後列出空白字符串?在java中排序超大的字符串數組

例如:如果我輸入了example1 @ domain,example2 @ domain,star和apple,下面的引用就是我的輸出。我希望所有的空字符串都在輸入的數據後面,而不是在它之前。

[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,...,...,...,...,...,...,..., ,,,蘋果,例1 @域名,示例2 @域,星]

代碼:

String[] data = new String[ARRAY_SIZE]; 

public static String[] addEmail(String[] data, String email, int index) { 
    int size = data.length; 
    data[index] = email; 

    int i,j; 
    String temp; 
    System.out.println(Arrays.toString(data)); 
    for (j = 1; j < data.length; j++) { 
     temp = data[j]; 
     i = j - 1; 
     while (i >= 0) { 
     if (temp.compareTo(data[i]) > 0) { 
      break; 
     } 
     data[i + 1] = data[i]; 
     i--; 
     } 
     data[i + 1] = temp; 
     System.out.println(Arrays.toString(data)); 
    } 
    System.out.println(Arrays.toString(data)); 

    return data; 
} 

編輯:我的代碼我自己的排序邏輯,在這個項目中 「效率」。我也必須使用一個超大的陣列。

+1

做你的事,並在結尾處加上一個'System.arraycopy()'該副本將數組的結尾添加到新數組的開頭,並用空字符串填充其餘部分。繁榮! – alfasin

+0

你必須寫你自己的排序邏輯?你允許使用像Arrays.sort()這樣的庫函數嗎? – Nayuki

+0

您是否需要手動對數組排序?通常情況下,Arrays.sort()完成了一項非常神奇的工作。 –

回答

1

請勿使用超大號陣列。使用Collection。既然你想要它被排序,我建議SortedSet。你可能會喜歡寫東西

public static SortedSet<String> addEmail(SortedSet<String> coll, 
     String email) { 
    if (coll == null) { 
     coll = new TreeSet<>(); 
    } 
    coll.add(email); 
    return coll; 
} 

如果你真的想使用String[]你能適應上述算法類似

public static String[] addEmail(String[] arr, String email) { 
    SortedSet<String> coll = new TreeSet<>(); 
    if (arr != null) { 
     coll.addAll(Arrays.asList(arr)); 
    } 
    coll.add(email); 
    return coll.toArray(new String[coll.size()]); 
} 
+0

我同意這將是一個很好的解決方案,但我必須使用我自己的排序邏輯,我必須在這個項目中使用一個超大的數組:( –