我正在尝试对超大字符串的电子邮件数组进行排序。当我事先没有用任何东西填充超大数组时,我得到一个nullPointerException。当我用空字符串填充数组时,我的代码按字母顺序对电子邮件列表进行排序,但将排序后的电子邮件列表放在空字符串后面。如何对电子邮件列表进行排序,使其首先按字母顺序在数组中列出电子邮件,然后列出空字符串?
示例:如果我输入example1 @ domain,example2 @ domain,star和apple,以下引用将是我的输出。我希望所有空字符串都在输入数据后面,而不是在它之前。
[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, apple,example1 @ domain,example2 @ domain,star]
代码:
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;
}
编辑:我必须为&#34;效率&#34;编写我自己的排序逻辑。在这个项目中。我还必须使用超大阵列。
答案 0 :(得分: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()]);
}