Первый вопрос: хотите ли вы сделать его переносимым через Unix / Windows?
Поскольку каждая ОС имеет определенные атрибуты файла.
Для портативного решения (атрибуты, общие для большинства ОС):
Получите BasicFileAttributes из целевой папки, в которой вы находитесь переход к. Например:
BasicFileAttributes basicAttr = Files.readAttributes (file, BasicFileAttributes.class);
blockquote>
Установить атрибуты к каждому перемещенному файлу
Для решения для конкретной ОС вместо BasicFileAttributes можно использовать:
DosFileAttributes attrs = Files.readAttributes (file, DosFileAttributes.class);
blockquote> [1122 ]
// Для получения значений атрибутов
логическое значение isArchive = attrs.isArchive ()
логическое значение isHidden = attrs.isHidden ()
логический isReadOnly = attrs.isReadOnly ()
логический isSystem = attrs.isSystem ()
// для установки атрибутов в новом файле
Files.setAttribute (newFile, "dos: archive", isArchive);
Files.setAttribute (newFile, "dos: hidden", isHidden); [ 1117]
Files.setAttribute (newFile, "dos: readonly", isReadOnly);
Files.setAttribute (newFile, "dos: system", isSystem);
- Атрибуты PosixFile для Unix
Ôption B, конечно.
A ужасен:
Выгода (Исключение) является действительно плохой практикой
Вы shoul не полагаетесь на исключение для пустого указателя касательно из диапазона...
Сортировка является путем complexier, чем повторение
Сложность:
Желание быть O (n журнал (n)) и даже O (n ²) в худшем случае
B худший случай O (n)
Побочного эффекта, что это сортирует массив. Это могло бы быть неожиданно вызывающей стороной.
Править: Мне не нравится возвращаться-1 для пустого или пустого массива (в обоих решениях), так как-1 могло бы быть легальное значение в массиве. Это должно действительно генерировать исключение (возможно, ArgumentException
).
Второй лучше. Сложность первого O(N LogN)
, и для второго это O(N)
.
Я должен выбрать опцию B - не, что это прекрасно, но потому что опция исключения использования для представления логики.
Я предпочитаю Опцию B, поскольку она только пересекает набор точно однажды.
В Опции A Вам, вероятно, придется получить доступ ко многим элементам несколько раз (количество раз является иждивенцем после реализации алгоритма вида).
Опция A является inefficent реализацией, но приводит к довольно четкому алгоритму. Это действительно однако использует довольно ужасную выгоду Исключения, которая была бы только когда-либо инициирована, если пустой массив передается в (так мог бы, вероятно, быть записан более ясный с проверкой перед видом).
PS, Вы никогда не должны просто ловить "Исключение" и затем исправлять вещи. Существует много типов Исключений, и обычно необходимо поймать каждого возможный и дескриптор соответственно.
Существует много факторов для рассмотрения здесь. Обе опции должны включать граничные проверки, которые находятся в опции B и покончили с использованием Обработки исключений тем способом. Вторая опция должна работать лучше большую часть времени, когда она только должна пересечь массив однажды. Однако, если данные были уже отсортированы или должны были быть отсортированы; затем Опция A была бы предпочтительна.
Никакой алгоритм сортировки не работает в n время, таким образом, Опция B будет самой быстрой в среднем.
Править: Статья о сортировке
Я сказал бы, что это зависит от того, какова Ваша цель, скорость или удобочитаемость.
Если бы скорость обработки является Вашей целью, я сказал бы, что второе решение, но если бы удобочитаемость является целью, я выбрал бы первый.
Я, вероятно, пошел бы для скорости для этого типа функции, таким образом, я выберу второй.
Я вижу две точки здесь:
Который лучше? Для первой точки, определенно явной проверки. Для второго это зависит...
Первый пример короче, делает это более быстрым, чтобы записать и читать/понимать. Второе быстрее. Так: Если эффективность во время выполнения является проблемой, выберите вторую опцию. Если быстрое кодирование является Вашей целью, используйте первый.