![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| kren |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.10.2006 Репутация: нет Всего: нет |
Дело в том, что мне надо отоброзить каталоги и файли в таком порядке, чтобы сначала шли каталоги, а только потом файлы. Сейчас y меня они все в куче, и никак немогу придумать как осушецтвить такую сортировку. Код примерно такой:
|
|||
|
||||
| shimopus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 25.8.2006 Репутация: 1 Всего: 1 |
а где собрался отображать-то этот список? Может это у тебя будет List объектов? Тогда можно создать свой компаратор (Comparator), который будет смотреть: если папка, то она больше любого файла, ну и другую логику в него можно запихнуть. А потом воспользоваться статическим методом Collections.sort и передать в него свою коллекцию и компаратор.
|
|||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
методом sort у коллекций не эффективно пользоваться еще с четвертой джавы, если что-то надо сортировать нужно пользоваться коллекциями, заточенными под сортировку...
вот пример, который берет список файлов с диска C и сортирует сначала папки и файлы, при чем в обоих случаях по алфавиту и без учета "заглавности" буковок:
-------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| shimopus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 25.8.2006 Репутация: 1 Всего: 1 |
Прошу прощения за оффтопик. Никак не могу понять смысла следующей строки:
|
|||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
один амперсанд по синтаксису означает, что будут проверяться оба условия, а не только первое, isDirectory() - это значит, что первый из сравниваемых объектов - это папка, соответственно, второй из сравниваемых объектов isFile() - это файл... Если первый объект папка а второй объект файл, то сортируемый объект перемещаем вверх по списку, если наоборот, то вниз, а если сравниваются два однотипных объекта, то перемещаем их вверх вниз или оставляем на месте сравнивая имена файлов...
Это все можно было почитать в джавадоках... -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| LSD |
|
||||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Это еще почему?
Сортировка уже существующего массива явно быстрей, и не требует дополнительной памяти на создание еще одной коллекции.
А какой в этом смысл в данном случае? Методы isDirectory() и isFile() не меняют состояние объекта. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||||
|
|||||||||
| kren |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.10.2006 Репутация: нет Всего: нет |
Спасиба за помощь. Проблему разрешил. Вот как ето сделал:
Это сообщение отредактировал(а) kren - 7.10.2006, 16:39 |
|||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
это не корректный пример, в этом случае тратится время на выделение памяти в коллекции, а массив уже заполнен. Ты посчитай время с заолнением массива - коллекция порвет на тряпки, т.к. массив располагается в памяти последовательно ему надо аллочить память кусками. К тому же в коллекции у тебя происходит сортировка одного элемента сразу при добавлении, а массив целиком сортируется - на перфомансе это очень негативно скапзывается, к тому же, если я буду добавлять в коллекцию элементы в результате неких действий, а захочу видеть отсортированные данные постоянно - массив придется все время пересортировывать...
а, ну да... -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Это пример для той задачи что была предложена. Ерунда! 1. Выделить один раз кусок на 1Мб гораздо проще чем 1024 раз по 1Кб. 2. Память SortedSet жрет нещадно. Если модифицировать мой пример:
ArrayList по прежнему быстрее, хотя и уже не настолько, сказывается время на заполнение массива. Но вот по памяти, ArrayList занял на пару байт больше чем 4Мб (т.е. столько сколько занимает массив 1024*1024 элементов), а вот SortedSet заняла 32Мб.
Согласен. В этом случае SortedSet предпочтительней, если конечно не требуется добавлять дублирующиеся элементы. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||
|
|||||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
да дело не только в потребляемой памяти, это естественно, что линкованные данные в памяти жрут больше места - за удобтво надо платить. Дело в том, что память, как таковая, сейчас стоит очень дешево в плане ресурсов и финансовых и физических. Ты попробуй замерить перфоманс, сортировка в коллекции сводится к перекидыванию ссылок, а при соритровке массива присутствуют некие трудности, связанные с тем, что данные расположены в памяти строго последовательно и фрагментированно... Вот представь ситуацию, что в один и тот же момент времени начинают сортировать данные 1к пользователей. Если брать процесс добавления в коллекцию по компаратору, то перфоманс будет в разы меньше, чем полная пересортировка коллекции... Вообще это дело такое, без нормального нагрузочного теста этот спор - просто сотрясание воздуха, я просто на основе своего опыта говорю
Это сообщение отредактировал(а) y3u - 7.10.2006, 18:36 -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Но в 8 раз больше! Это больше чем занимают сами данные. Я думаю тебе надо почитать, что из себя представляют массивы в Java. Потому что все что ты сейчас высказал, не имеет никакого отношения к реальности Массивы в Java хранят в себе только ссылки (исключение составляют массивы примитивных типов, но здесь про них никто не говорил). Так что и в случае с массивами сортируются только ссылки. Между прочим если посмотришь исходный код ArrayList, то увидишь, что по сути это обычный массив плюс парочка сервисных функций и по скорости доступа быстрее всего массив. Опыт это конечно хорошо, но если ты не можешь предложить никакого конкретного теста, то это как ты выразился "просто сотрясание воздуха". -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
2 LSD
ну я же не претендую на что-то из ряда вон полез в исходнеги и в документацию... ПыСы уже в который раз убеждаюсь - джава и традиционные языки не всегда корелируют! В разреботчиках джабы ОЧЕНЬ серьезные дядьки с тётьками тусят... ПыПЫСы отдельный респектище матёрым форумчанам - дело во всех отнощениях полезное! много мнений - аргументированый выбор! ПыПыПыСы я настаиваю на замерах хардвар перфоманса! Это сообщение отредактировал(а) y3u - 7.10.2006, 22:25 -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
В чем проблема, предложи идею и код. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |