сортировка вставки для объекта-массива?

1

Например, у меня есть следующие классы:

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-й слот.

Теги:
arrays
sorting

3 ответа

0
Лучший ответ

Если вы действительно заинтересованы в сортировке вставки, попробуйте это.

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() просто помогает вам в сравнении строк, для реализации собственных сравнений строк будет изобретать колесо.

  • 0
    Это то, что я искал, спасибо, мой друг.
  • 0
    Кстати, почему вы назначили меня как 2 в первом для цикла? заранее спасибо
3

Сделать FooService реализовать Comparable. Сопоставьте метод compareTo по алфавиту. А затем используйте Arrays.sort(services); он сортирует ваш массив.

Подробнее здесь: http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#sort (java.lang.Object [])

2

Если вы периодически добавляете много новых элементов в свой массив, то Arrays.sort() описанный @Jakkra, является разумным подходом.

Если вы часто добавляете только несколько элементов каждый раз, то этот подход немного тяжелый, вы можете рассмотреть TreeSet (также требуется реализовать Comparable).

РЕДАКТИРОВАТЬ: только что увидели ваше обновление, в котором говорится, что вы не можете использовать коллекции (!), Поэтому второй вариант вам не подходит, но я оставлю его здесь для потомков.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню