2013-08-22 1 views
2

Я пришел сюда (SO) несколько дней назад, чтобы исследовать, как получить минимальное и максимальное количество из коллекции в Android, и нашел решение о последствиях следующего (извините, у меня нет ссылки на фактический ответ, который я использовал):Android - Нужно ли сортировать коллекцию для min и max?

Max = (TextView)findViewById(R.id.Max); 
Collections.sort(list); 
Max.setText(String.format("%.2f", Collections.max(list))); 

Мой вопрос: действительно ли нужно отсортировать список, прежде чем вытягивать значение min/max? Я попытался запустить код без сортировки списка и, похоже, работает нормально. Я просто волнуюсь, потому что ответ, который я использовал, определенно отсортировал список сначала, поэтому я предполагаю, что должна быть причина, я просто не знаю, что это такое!

+0

Спасибо всем; это список двойников, поэтому они должны сортировать «правильно». –

ответ

3

В дополнение @ ответ BobbyDigital, который corectly указывает на й метод перебирает полный список, я просто хотел бы отметить, что в результате использования функции max может зависеть от типа элементов списка. Если вы видите doc, он говорит, что

Возвращает максимальный элемент данного набора, согласно естественному упорядочиванию его элементов.

Если вы видите Why does Collections.max() not return actual max value for a Collection of String? вопрос, человек использовал список Strings. При извлечении max с использованием номера abve он не получил максимальное количество, так как он возвращал значение, самое большое lexicographically. Так, только упомянуть его код:

ArrayList<String> dirNo = new ArrayList<String>(); 

dirNo.add("1"); 
dirNo.add("2"); 
dirNo.add("3"); 
dirNo.add("4"); 
dirNo.add("5"); 
dirNo.add("6"); 
dirNo.add("7"); 
dirNo.add("8"); 
dirNo.add("9"); 
dirNo.add("10"); 
dirNo.add("11"); 

System.out.println("max : " + Integer.parseInt(Collections.max(dirNo)) 
     + ""); 

Приведенный выше код дал 9 в качестве ответа. Поэтому будьте осторожны при использовании. Вы хотите преобразовать все в Integer и т. Д. В зависимости от ваших потребностей.

P.S: пример из упомянутого вопроса и ответ вдохновлен this ответ NPE на одном и том же вопрос.

+0

Но не сортировка дала бы те же результаты. Я понял, что вопрос заключается в сортировке предшествующего вопроса. – ChiefTwoPencils

+1

Вы правы. Его вопрос состоял в том, что сортировка до использования макс-материи (и вы уже ответили на это :)). Я упомянул об этом, видя общее намерение того, что человек пытается сделать. Поскольку он хочет получить максимум из списка, я просто хочу, чтобы было здорово держаться в глубине души (результат, возможно, не тот, который он ожидал). –

2

Нет, его не нужно сортировать. Метод выполняет итерацию по всей коллекции.
See the Java docs for the method!

+1

Просто добавьте немного ответа Бобби, вам не нужно сортировать, нет, но то, что максимальное и минимальное значение зависит от типов в вашей коллекции. См. Конкретный метод «max», например: http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#max(java.util.Collection) (использует * natural * порядок, если вы хотите, чтобы какой-либо другой заказ поставлял компаратор [следующий метод вниз]). –