|
|
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
Привет всем. Есть класс, в котором 3 свойства: class User { int kod; String user; String IP; }; В другом классе создается АrrayList из экземпляров класса User; Возможно ли отсоритровать этот массив по определенному свойству класса User? Например по IP. Подскажите, есть ли в Java определенные механизмы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 16:40 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
для твоего класса переопределяешь метод equals() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 16:52 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
Нужно использовать класс TreeSet, а твой класс должен реализовывать интерфейс Comparator. И тогда при добавлении твоих объектов в TreeSet они будут автоматически сортироваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 17:17 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
Классы ArrayList и его ближайший родственник LinkedList, нужны именно для того, чтобы хранить данные в том породке, в котором они были занесены. Это в дополнение к предюдущему топику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 17:24 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
wessenНужно использовать класс TreeSet, а твой класс должен реализовывать интерфейс Comparator. И тогда при добавлении твоих объектов в TreeSet они будут автоматически сортироваться. Класс User должен реализовывать интерфейс Comparator? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 17:28 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
А.Гpacoffдля твоего класса переопределяешь метод equals() И что это даст? Можно небольшой пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 17:30 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
alex2808 А.Гpacoffдля твоего класса переопределяешь метод equals() И что это даст? Можно небольшой пример? :) сорри. жара. опять не то спестданул :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 17:51 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
alex2808 wessenНужно использовать класс TreeSet, а твой класс должен реализовывать интерфейс Comparator. И тогда при добавлении твоих объектов в TreeSet они будут автоматически сортироваться. Класс User должен реализовывать интерфейс Comparator? точно-точно. все перепутал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 17:51 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
alex2808 wessenНужно использовать класс TreeSet, а твой класс должен реализовывать интерфейс Comparator. И тогда при добавлении твоих объектов в TreeSet они будут автоматически сортироваться. Класс User должен реализовывать интерфейс Comparator?Да, класс User. Ну и соответственно класс User должен реализовать метод , а вот какой хз, не помню, вроде - int compare(Object obj). Хотя IDE тебе само подскажет какой :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 18:08 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
А если точно, то при создании класса TreeSet можно указать объект реализующий интерфейс Comporator (cодержащий методы compare & equals), согласно которому будут сортироваться все добавляемые элементы. з.ы. А элементы ArrayList никто не запрещает сортировать любым быстрым алгоритмом сортировки, соответствующим образом заменив критерии больше/меньше. Быстрее чем за NlgN всё равно работать не будет ^_^ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 11:10 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
авторА если точно, то при создании класса TreeSet можно указать объект реализующий интерфейс Comporator (cодержащий методы compare & equals), согласно которому будут сортироваться все добавляемые элементы. Да, так тоже можно, даже нужно :) авторз.ы. А элементы ArrayList никто не запрещает сортировать любым быстрым алгоритмом сортировки, соответствующим образом заменив критерии больше/меньше. Быстрее чем за NlgN всё равно работать не будет ^_^что-то я не понял, это типа если я хочу добавить объект в ArrayList и мне нужна сортировка, то нужно сначала извлеч итераторм все объекты в масив, отсортировать этот массив и потом обратно в ArrayList??? Это же изврат. Иль я опять все перепутал:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 11:29 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
Граспыхдля твоего класса переопределяешь метод equals()Тогда надо и переопределять и hashCode. И при определении equals надо чтобы там всякие требования вроде a.equals(b) = true => b.equals(a) выполнялись. _______________ Alex There are three kinds of people: those who can count and those who can't ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 13:58 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
stdio Граспыхдля твоего класса переопределяешь метод equals()Тогда надо и переопределять и hashCode. И при определении equals надо чтобы там всякие требования вроде a.equals(b) = true => b.equals(a) выполнялись. _______________ Alex There are three kinds of people: those who can count and those who can't харашо майу фамилейу испортел. я ж говорю - жарко - перепутал :) не то сказал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 14:05 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
stdio Граспыхдля твоего класса переопределяешь метод equals()Тогда надо и переопределять и hashCode. И при определении equals надо чтобы там всякие требования вроде a.equals(b) = true => b.equals(a) выполнялись. _______________ Alex There are three kinds of people: those who can count and those who can't это нужно делать например для HashSet, что б туда одинаковые объекты не попадали, alex2808 нуно что б упорядочено было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 14:18 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
wessenчто-то я не понял, это типа если я хочу добавить объект в ArrayList и мне нужна сортировка, то нужно сначала извлеч итераторм все объекты в масив, отсортировать этот массив и потом обратно в ArrayList??? Это же изврат. Иль я опять все перепутал:) Таки да перепутали :) ArrayList как и любую коолекцию, реализующую интерфейс List можно отсортировать с помощью компаратора (или естественным образом) используя статический метод sort класса Collections. Например, решение задачи представленной автором топика могло бы выглядить следующим образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2004, 01:42 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
2Nikles Точно-точно. Collections.sort(users,new UserComp()); - реализует сортировку слиянием. Хорошо, что не пузырёк :) 2wessen Всё верно. Извлечь, отсортировать, засунуть назад. Именно так делает метод sort. Правда специфика конкретной задачи, может влиять на эффективность решения. Например: 1) Добавления происходят редко, в промежутках между ними используется тот факт, что АrrayList должен быть отсортирован. Тогда каждое добавление это двоичный поиск в сортированном листе и вставка в нужное место элемента. 2) Элементы добавляются "группами". Тогда либо сортируем группу и "сливаем" её с исходным листом (если размер группы меньше кол-ва уже добавленных элементов), либо просто добавляем все элементы в лист, а потом его сортируем. Разница не велика будет :) Скорее почти незаметна. Надо отдавать себе отсчёт, что на практике ArrayList это тот же самый массив, к которому прикрутили несколько удобных методов :) А вот TreeSet это уже другая структура. У обоих есть плюсы/минусы по скорости поиска/вставки/удаления элементов, и что выбрать на практике, повторюсь, зависит от специфики задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2004, 10:46 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
^^^ тут не всё для wessen'a, больше для alex28008 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2004, 10:48 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Надо отдавать себе отсчёт, что на практике ArrayList это тот же самый массив, к которому прикрутили несколько удобных методов :) Ну если быть точным, то главное что отличает ArrayList от обычного массива в Java это не "несколько удобных методов", а то что ArrayList - это динамический массив :) NotGonnaGetUs А вот TreeSet это уже другая структура. У обоих есть плюсы/минусы по скорости поиска/вставки/удаления элементов, и что выбрать на практике, повторюсь, зависит от специфики задачи. Кроме того TreeSet принципиально отличается тем, что не позволяет сохранять в коллекции одинаковые элементы. Поэтому, если уж сравнивать ArrayList по скорости основных операций, то наверное не с TreeSet, а с LinkedList. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2004, 11:30 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
1) Возможно я дико заблуждаюсь, но ArrayList это всего лишь оболочка для ссылки на обычной массив, который создаётся заново при изменении размера листа. Поэтому акцентировать внимание на его "динамичности" при оценки производительности мало смысла. 2) Да, согласен, TreeSet не эквивалентен ArrayList'у. Однако ситуация, когда в ArrayList'e по смыслу не может быть одинаковых элементов, вполне реальна. Если мы имеем дело с частыми вставками/выборками элементов, то может быть оправданным, ради существенного увеличения производительности, поменять логику приложения, так что одинаковые элементы не добавлялись и заменить лист на treeset %) Но это тонкости... Сравнивать c линкед листом тоже можно, тут не поспоришь :), хотя произвольный достпуп к элементам такого листа слишком медленный. Хотя если нужно загнать большое кол-во элементов в АррайЛист, то идеальный вариант сначала пропихнуть их все в линкед лист, а затем лист превратить в массив %) Вместо N^2 получим N. Правда если кол-во вставляемых элментов заранее известно, этой ерундой лучше не страдать. з.ы. извините, что-то пробило поумничать :( не пинайте сильно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2004, 17:44 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsз.ы. извините, что-то пробило поумничать :( не пинайте сильно :) Меня тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2004, 20:32 |
|
||
|
Как отсортировать элементы ArrayList
|
|||
|---|---|---|---|
|
#18+
Могу посоветовать прочитать урок по TreeSet http://]http://www.javable.com/tutorials/fesunov/lesson11/ Предыдущий урок про ArrayList ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2006, 10:09 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=32619854&tid=2149092]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 411ms |

| 0 / 0 |
