在java

时间:2015-04-23 03:44:38

标签: java arrays sorting

我正在尝试对超大字符串的电子邮件数组进行排序。当我事先没有用任何东西填充超大数组时,我得到一个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;编写我自己的排序逻辑。在这个项目中。我还必须使用超大阵列。

1 个答案:

答案 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()]);
}