2015-04-23 7 views
0

Я пытаюсь сортировать массив строк большого размера. Когда я не заполняю негабаритный массив чем-нибудь заранее, я получаю исключение nullPointerException. Когда я заполняю массив пустыми строками, мой код сортирует список писем в алфавитном порядке, но помещает отсортированный список писем за пустыми строками. Как сортировать список писем, чтобы он сначала перечислял электронные письма в алфавитном порядке в массиве, а затем перечислял пустые строки?Сортировка большого массива строк в java

Пример: Если я ввел example1 @ domain, example2 @ domain, star и apple, следующей цитатой будет мой вывод. Я хочу, чтобы все пустые строки находились за введенными данными, а не раньше.

[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,, яблоко, example1 @ домен, example2 @ домен, звезда]

Код:

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; 
} 

Edit: я должен закодировать свою собственную логику сортировки для "эффективности" в этом проекте. Я также должен использовать негабаритный массив.

+1

Сделайте свою вещь и добавить в конце текста 'System.arraycopy()', что копии конец массива в начало нового массива и заполнение остальных пустыми строками. Boom! – 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

Я согласен, что это будет отличное решение, но я должен использовать свою собственную логику сортировки, и я должен использовать в этом проекте огромный массив :( –

Смежные вопросы