Вы можете взять в качестве примера способ <a href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/util/Collections.html" rel="nofollow noreferrer">Collections</a>
, обеспечивающий операцию binarySearch ... И действительно,
int[] sortedInts = Sorting.insertionSort(myInts);
более Java-способ, даже если бы я лично предпочел
public class Sorting {
public static <DataType extends Comparable> Iterable<DataType> insertionSort(Iterable<DataType> data);
}
<DataType>
убедитесь, что выходные данные имеют тот же тип, что и входные Iterable<DataType>
входные данные являются итеративными, чтобы обеспечить максимальную совместимость.Очевидно, что использование List было бы намного проще, поскольку оно позволяет переупорядочивать внутренние элементы.Однако, используя итеративную гарантию, разработчик этого метода должен будет заново создать список, чтобы изменить его, гарантируя, что входной список останется неизменным и что выходной список будет другим.
Поскольку я только что видел, как вы редактируете свой вопрос, позвольте мне ответить на него по пунктам (и подумайте над выбором ответа после этого, поскольку легче добавлять новые вопросы, чем бесконечно редактировать существующие - если вы не зададите свой вопросвики сообщества, как я делаю из этого ответа)
Лучше ли пользователю создать класс для сортировки или иметь статический метод в классе, который импортирует пользователь?
На мой взгляд, использование статического метода в этом случае предпочтительнее, поскольку здесь вам приходится манипулировать объектами, которые вы не создавали, довольно «базовым» способом.
Можно ли легко иметь дело как с примитивными типами данных, так и с универсальными объектами? Поскольку я хочу иметь возможность обрабатывать любой универсальный объект, который реализует Comparable
(или аналогично), tЗатем он вызывает проблемы с примитивами (поскольку они ничего не реализуют;)).
Вы слышали о autoboxing ?Это особенность Java 5, которая делает первичные типы «эквивалентами» объектов.То есть int автоматически преобразуются в Integer, который, как вы знаете, реализует Comparable.
Каков наилучший способ обработки общего ввода - что я должен проверить, прежде чем пытаться отсортировать их (например, реализует Comparable)?
Обратите внимание, что из-за объявления моего метода (the) проверка того, что входные данные реализуют Comparable, выполняется не вами, а компилятором Jav, что позволяет вашей IDEпокажу вам ошибки.