Например, у меня есть следующие классы:
public class FooService {
private String name;
private int quantity;
public FooService(String name, int quantity) {
this.name = name;
this.quantity = quantity;
}
// getters + setters
}
а также
public class FooStorage {
private FooService [] services = new FooService[10];
public void add(FooService fooService) {
}
}
Я хочу сортировать массив служб в алфавитном порядке в соответствии с параметром имени элемента.
Я знаю, что я могу использовать компаратор в этом случае, но это очень дорого при импорте большого количества данных. Может ли кто-нибудь помочь мне со вставкой здесь?
EDIT: Мне не разрешено использовать Коллекции. Кроме того, не обращайте внимания на фиксированный размер массива. Я выделяю первоначально 5000 слотов, а затем умножаю их на 2, если в моей программе достигнут 5000-й слот.
Если вы действительно заинтересованы в сортировке вставки, попробуйте это.
public void sort(){
for(int i=2;i<services.length;i++){
int j=i-1;
FooService key=services[i];
while((j>-1)&& ((services[j].getName().compareTo(key.getName()))>0)){
services[j+1]=services[j];
j--;
}
services[j+1]=key;
}
}
PS Вы не используете коллекции... compareTo()
просто помогает вам в сравнении строк, для реализации собственных сравнений строк будет изобретать колесо.
Сделать FooService
реализовать Comparable
. Сопоставьте метод compareTo
по алфавиту. А затем используйте Arrays.sort(services);
он сортирует ваш массив.
Подробнее здесь: http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#sort (java.lang.Object [])
Если вы периодически добавляете много новых элементов в свой массив, то Arrays.sort()
описанный @Jakkra, является разумным подходом.
Если вы часто добавляете только несколько элементов каждый раз, то этот подход немного тяжелый, вы можете рассмотреть TreeSet
(также требуется реализовать Comparable
).
РЕДАКТИРОВАТЬ: только что увидели ваше обновление, в котором говорится, что вы не можете использовать коллекции (!), Поэтому второй вариант вам не подходит, но я оставлю его здесь для потомков.