powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как отсортировать элементы ArrayList
22 сообщений из 22, страница 1 из 1
Как отсортировать элементы ArrayList
    #32617395
alex2808
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.
Есть класс, в котором 3 свойства:
class User
{
int kod;
String user;
String IP;
};
В другом классе создается АrrayList из экземпляров класса User;
Возможно ли отсоритровать этот массив по определенному свойству класса User? Например по IP.
Подскажите, есть ли в Java определенные механизмы?
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32617441
Фотография А.Гpacoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для твоего класса переопределяешь метод equals()
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32617516
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно использовать класс TreeSet, а твой класс должен реализовывать интерфейс Comparator. И тогда при добавлении твоих объектов в TreeSet они будут автоматически сортироваться.
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32617536
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классы ArrayList и его ближайший родственник LinkedList, нужны именно для того, чтобы хранить данные в том породке, в котором они были занесены. Это в дополнение к предюдущему топику.
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32617550
alex2808
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenНужно использовать класс TreeSet, а твой класс должен реализовывать интерфейс Comparator. И тогда при добавлении твоих объектов в TreeSet они будут автоматически сортироваться.
Класс User должен реализовывать интерфейс Comparator?
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32617555
alex2808
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Гpacoffдля твоего класса переопределяешь метод equals()
И что это даст? Можно небольшой пример?
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32617597
Фотография А.Гpacoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex2808 А.Гpacoffдля твоего класса переопределяешь метод equals()
И что это даст? Можно небольшой пример?

:) сорри. жара. опять не то спестданул :)
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32617598
Фотография А.Гpacoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex2808 wessenНужно использовать класс TreeSet, а твой класс должен реализовывать интерфейс Comparator. И тогда при добавлении твоих объектов в TreeSet они будут автоматически сортироваться.
Класс User должен реализовывать интерфейс Comparator?

точно-точно. все перепутал :)
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32617642
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex2808 wessenНужно использовать класс TreeSet, а твой класс должен реализовывать интерфейс Comparator. И тогда при добавлении твоих объектов в TreeSet они будут автоматически сортироваться.
Класс User должен реализовывать интерфейс Comparator?Да, класс User. Ну и соответственно класс User должен реализовать метод , а вот какой хз, не помню, вроде - int compare(Object obj). Хотя IDE тебе само подскажет какой :)
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32618271
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если точно, то при создании класса TreeSet можно указать объект реализующий интерфейс Comporator (cодержащий методы compare & equals), согласно которому будут сортироваться все добавляемые элементы.

з.ы. А элементы ArrayList никто не запрещает сортировать любым быстрым алгоритмом сортировки, соответствующим образом заменив критерии больше/меньше. Быстрее чем за NlgN всё равно работать не будет ^_^
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32618321
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА если точно, то при создании класса TreeSet можно указать объект реализующий интерфейс Comporator (cодержащий методы compare & equals), согласно которому будут сортироваться все добавляемые элементы.
Да, так тоже можно, даже нужно :)

авторз.ы. А элементы ArrayList никто не запрещает сортировать любым быстрым алгоритмом сортировки, соответствующим образом заменив критерии больше/меньше. Быстрее чем за NlgN всё равно работать не будет ^_^что-то я не понял, это типа если я хочу добавить объект в ArrayList и мне нужна сортировка, то нужно сначала извлеч итераторм все объекты в масив, отсортировать этот массив и потом обратно в ArrayList??? Это же изврат. Иль я опять все перепутал:)
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32618780
Фотография 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
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32618810
Фотография А.Гpacoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

харашо майу фамилейу испортел.

я ж говорю - жарко - перепутал :) не то сказал :)
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32618857
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 нуно что б упорядочено было.
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32619774
Nikles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
import java.util.*;

class User
{
int kod;
String user;
String IP;
};

class UserComp implements Comparator {
  public int compare(Object user1, Object user2) {
    return ((User) user1).IP.compareTo(((User) user2).IP);
  }
}

public class SortTest {
  public static void main(String[] args) {
    ArrayList users = new ArrayList();

//...

    Collections.sort(users,new UserComp());

//...

  }
}
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32619835
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Nikles
Точно-точно. Collections.sort(users,new UserComp()); - реализует сортировку слиянием. Хорошо, что не пузырёк :)


2wessen
Всё верно. Извлечь, отсортировать, засунуть назад. Именно так делает метод sort. Правда специфика конкретной задачи, может влиять на эффективность решения.
Например:
1) Добавления происходят редко, в промежутках между ними используется тот факт, что АrrayList должен быть отсортирован. Тогда каждое добавление это двоичный поиск в сортированном листе и вставка в нужное место элемента.
2) Элементы добавляются "группами". Тогда либо сортируем группу и "сливаем" её с исходным листом (если размер группы меньше кол-ва уже добавленных элементов), либо просто добавляем все элементы в лист, а потом его сортируем. Разница не велика будет :) Скорее почти незаметна.

Надо отдавать себе отсчёт, что на практике ArrayList это тот же самый массив, к которому прикрутили несколько удобных методов :) А вот TreeSet это уже другая структура. У обоих есть плюсы/минусы по скорости поиска/вставки/удаления элементов, и что выбрать на практике, повторюсь, зависит от специфики задачи.
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32619836
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
^^^ тут не всё для wessen'a, больше для alex28008 :)
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32619854
Nikles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs
Надо отдавать себе отсчёт, что на практике ArrayList это тот же самый массив, к которому прикрутили несколько удобных методов :)

Ну если быть точным, то главное что отличает ArrayList от обычного массива в Java это не "несколько удобных методов", а то что ArrayList - это динамический массив :)
NotGonnaGetUs
А вот TreeSet это уже другая структура. У обоих есть плюсы/минусы по скорости поиска/вставки/удаления элементов, и что выбрать на практике, повторюсь, зависит от специфики задачи.

Кроме того TreeSet принципиально отличается тем, что не позволяет сохранять в коллекции одинаковые элементы. Поэтому, если уж сравнивать ArrayList по скорости основных операций, то наверное не с TreeSet, а с LinkedList.
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32620006
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Возможно я дико заблуждаюсь, но ArrayList это всего лишь оболочка для ссылки на обычной массив, который создаётся заново при изменении размера листа. Поэтому акцентировать внимание на его "динамичности" при оценки производительности мало смысла.

2) Да, согласен, TreeSet не эквивалентен ArrayList'у.
Однако ситуация, когда в ArrayList'e по смыслу не может быть одинаковых элементов, вполне реальна.
Если мы имеем дело с частыми вставками/выборками элементов, то может быть оправданным, ради существенного увеличения производительности, поменять логику приложения, так что одинаковые элементы не добавлялись и заменить лист на treeset %)
Но это тонкости...

Сравнивать c линкед листом тоже можно, тут не поспоришь :), хотя произвольный достпуп к элементам такого листа слишком медленный.

Хотя если нужно загнать большое кол-во элементов в АррайЛист, то идеальный вариант сначала пропихнуть их все в линкед лист, а затем лист превратить в массив %) Вместо N^2 получим N. Правда если кол-во вставляемых элментов заранее известно, этой ерундой лучше не страдать.

з.ы. извините, что-то пробило поумничать :( не пинайте сильно :)
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #32620060
Nikles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUsз.ы. извините, что-то пробило поумничать :( не пинайте сильно :)
Меня тоже
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как отсортировать элементы ArrayList
    #33762371
GAZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GAZ
Гость
Могу посоветовать прочитать урок по TreeSet
http://]http://www.javable.com/tutorials/fesunov/lesson11/
Предыдущий урок про ArrayList
...
Рейтинг: 0 / 0
Как отсортировать элементы ArrayList
    #33762407
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой же я был(есть?) мудозвон.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как отсортировать элементы ArrayList
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]