Есть ли какая-то причина, по которой вы не можете использовать alloca () для выделения необходимого пространства в фрейме стека в зависимости от того, насколько большой объект действительно должен быть?
Если вы это сделаете и все равно выложите стек, положите его в выделенную кучу. Я настоятельно рекомендую НЕ объявлять его как static в main () и помещать его в сегмент данных.
Если это действительно так важно, и ваша программа не может выделить его в кучу, ваша программа действительно на самом деле не работает бизнес на этом типе машины.
Что (точно) вы пытаетесь выполнить?
Можно сравнить Список даты в строковом формате, используя сравнение, как указано ниже.
ArrayList<String> datestring=new ArrayList<String>();
datestring.add("01/21/2013 @03:13 PM");
datestring.add("01/21/2013 @04:37 PM");
datestring.add("01/21/2013 @10:41 AM");
datestring.add("01/21/2013 @10:48 AM");
datestring.add("01/22/2013 @06:16 AM");
datestring.add("01/22/2013 @06:19 AM");
datestring.add("01/21/2013 @05:19 PM");
datestring.add("01/21/2013 @05:19 PM");
Collections.sort(datestring, new Comparator<String>() {
@Override
public int compare(String object1, String object2) {
return object1.compareTo(object2);
}
});
При использовании этого вам даже не нужно анализировать строку в дату
Во-первых, как уже сказал Bowmore , вы не должны хранить строки в своем списке. Вместо этого используйте экземпляры классов java.time .
Сохранить LocalDateTime
объектов. Или ZonedDateTime
, если вы знаете, в каком часовом поясе время. Строки хороши для представления пользователю, а не для манипуляций в вашей программе, таких как сортировка.
Следующий код преобразует ваш список в List<LocalDateTime>
:
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("MM/dd/uuuu '@'hh:mm a", Locale.ENGLISH);
List<LocalDateTime> dateTimeList = datestring.stream()
.map(ds -> LocalDateTime.parse(ds, formatter))
.collect(Collectors.toCollection(ArrayList::new));
Теперь сортировка проста:
dateTimeList.sort(Comparator.naturalOrder());
LocalDateTime
имеют естественный порядок, поскольку они реализуют Comparable
, поэтому Comparator.naturalOrder()
подходит для сортировки. Другой способ получения такой же сортировки:
dateTimeList.sort(LocalDateTime::compareTo);
Чтобы представить отсортированные данные пользователю, мы хотим отформатировать дату и время в строки, конечно:
dateTimeList.forEach(ldt -> System.out.println(ldt.format(formatter)));
вывод:
01/21/2013 @10:41 AM
01/21/2013 @10:48 AM
01/21/2013 @03:13 PM
01/21/2013 @04:37 PM
01/21/2013 @05:19 PM
01/21/2013 @05:19 PM
01/22/2013 @06:16 AM
01/22/2013 @06:19 AM
За исключением точек с запятой и одной простой опечатки, я считаю, что это именно то, что вы просили.
Ссылка: Обучающая программа Oracle: Дата и время , объясняющая, как использовать java.time
, современный Java-интерфейс даты и времени, который включает в себя LocalDateTime
и DateTimeFormatter
.
ArrayList не поддерживает сортировку по умолчанию. Вы можете использовать
public static <T> void sort(List<T> list, Comparator<? super T> c)
из java.util.Collections
класса. передать вашу реализацию компаратора для сортировки дат, что-то вроде
http://www.coderanch.com/t/392338/java/java/compare-Dates-String-Format