У сравнения есть какая-то задержка перед запуском? - PullRequest
4 голосов
/ 28 февраля 2011

Я только что нашел это утверждение: «Можно значительно повысить производительность CompareTo, сравнивая сначала элементы, которые, скорее всего, будут отличаться». Это правда? И если это так, то почему?

Ответы [ 3 ]

5 голосов
/ 28 февраля 2011

Рассмотрим класс с несколькими свойствами.Для сравнения экземпляров необходимо сравнить некоторые их свойства.Если все свойства, кроме одного, равны, то количество сравнений, которое вам нужно сделать, зависит от порядка сравнений свойств: если вам сначала нужно сравнить различные свойства, вы получите результат с одним сравнением.Но если вы сравниваете различные свойства в последний раз, вам нужно было сделать n сравнений, чтобы получить тот же результат.

Как заметил @Kdeveloper, разница в производительности может быть не заметна, если вы не выполните многоаналогичные сравнения в партиях.Но другим преимуществом является IMHO логический порядок : это заставляет задуматься о логических отношениях между свойствами классов.И в целом, поскольку это неразрывная оптимизация (то есть она не делает код более сложным для чтения и сопровождения), я думаю, что стоит делать это большую часть времени.

1 голос
/ 28 февраля 2011

Да, это правда

Потому что, если вы ставите сначала самое выборочное сравнение, вы в среднем будете выполнять меньше кода для каждого сравнения.Но так как эти тесты обычно очень быстрые, улучшения скорости будут заметны, только если вы сравните много объектов, например, при сортировке большой коллекции.

0 голосов
/ 28 февраля 2011

Это правда?И если это так, то почему?

Ну, буквально говоря, нет.Метод compareTo будет выполняться одинаково долго, независимо от истории.

Может ли он достичь какой-либо общей производительности в конкретной реализации?Да точно.Но чтобы ответить на ваш вопрос, нам понадобится больше информации о ситуации.

...