Самый быстрый способ сортировки массива объектов в java
у меня есть класс под названием apple, который содержит 3 значения как int x
, int y
и int weight
. Затем я создал массив объектов типа яблоко. Теперь я хочу отсортировать массив объектов на основе веса, что означает, что объект apple с наименьшим весом должен быть первым и так далее.
Я знаю, что есть довольно много способов достичь этого с помощью массивов.сортировка etc или компараторы.
мне было интересно, каков самый быстрый способ сделать этот вид в Java? Может быть случай, когда у меня есть 500 000 объектов, поэтому я хочу знать, что я должен использовать, главное какой подход даст мне лучший подход. я даже написал свой собственный быстрый сорт с разделом Hoare.
код для класса Apple
public class Apple {
public int x;
public int y;
public int weight;
public Apple(int a, int b, int w) {
x = a;
y = b;
weight = w;
}
}
код для основного класса
public class main {
static Apple[] appleArray;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
int totalApples = sc.nextInt();
appleArray = new Edge[totalApples];
int x = 10;
int y = 20;
int w = 30;
for (int i = 0; i < size; i++) {
appleArray[i] = new Apple(x, y, w);
x++;
y++;
w++;
}
//Now i want to sort array of apple objects based on weight
}
}
5 ответов
в этой книге есть полезная шпаргалка для выбора оптимальной сортировки для ваших нужд: https://www.safaribooksonline.com/library/view/algorithms-in-a/9780596516246/ch04s09.html
самое простое решение
на использует реализация quicksort, который подойдет для многих ситуаций. Для вашего примера кода это может быть:
Arrays.sort(appleArray, new Comparator<Apple>(){
@Override
public int compare(Apple apple1, Apple apple2){
return apple1.weight - apple2.weight;
}
});
самое быстрое решение
In в вашем случае у вас есть большой массив, содержащий повторения, например, 50,000 яблок в вашем массиве могут весить 3 унции... Поэтому вы можете выбрать реализацию ведро вроде улучшить представление над quicksort, которое может быть расточительно в таких условиях. Вот это пример реализации.
возможно, проверьте несколько исследованных вариантов, используя API Java, когда это подходит, чтобы определить лучшее решение для вашего входного набора.
Я бы сначала использовать Java API. Если это недостаточно быстро, я бы искал оптимизированную библиотеку сортировки.
также рассмотрим базу данных, движки БД быстры и оптимизированы для сортировки больших наборов данных.
мы можем использовать коллекции.сортировка с помощью пользовательского компаратора.
class Apple {
public final int weight;
// ...
};
List<Apple> apples = // ...
Collections.sort(apples, new Comparator<Apple>() {
@Override public int compare(Apple a1, Apple a2) {
return a1.weight - a2.weight; // Ascending
}
});
Если в вашем объекте есть какое-либо число или целое число, над которым вы должны сортировать, вы можете сделать это -
List<Object> obj = new ArrayList<Object>();
Collections.sort(obj, new Comparator<Object>() {
@Override
public int compare(Object object1, Object object2) {
return object1.getNumber() > object2.getNumber() ? 1 : -1;
}
});
и если нет числа или целого числа, по которому вы можете сортировать его, и у вас просто есть строки в вашем объекте, чем присваивать значение строкам перечислением.
enum Code {
Str1(1), Str2(2), Str3(3), Str4(4), Str5(5));
int sortNumber;
Code(int sortNumber) {
this.sortNumber = sortNumber;
}
int returnNumber() {
return sortNumber;
}
};
public static void main(String[] args) {
List<Object> obj = new ArrayList<Object>();
Collections.sort(obj, new Comparator<Object>() {
@Override
public int compare(Object object1, Object object2) {
return Code.valueOf(object1.getStr()).returnNumber() > Code.valueOf(object2.getStr()).returnNumber() ? 1 : -1;
}
});
}