2012-01-16 3 views
3

Есть список целых чисел, какУ меня есть список целых чисел, как их сортировать?

List<Integer> l = new ArrayList<Integer>(); 

Я думаю, вызывающий l.contains медленно, как отсортировать список. После сортировки будет l.contains вести себя быстрее?

Есть ли какой-либо sortedList, который я могу использовать напрямую?

+2

'l.sort()' не работает? http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#sort%28java.util.List%29 – Oliver

+3

@Oliver 'sort' не определен в' Collection' – adarshr

+0

Возможно, вам это тоже полезно http://stackoverflow.com/questions/2661065/a-good-sorted-list-for-java – Marthin

ответ

13

Это не может быть проще, чем это.

Collections.sort(l); 
4

Вы можете использовать Collections.sort(l);

1

содержит() на ArrayList не предполагает, что массив отсортирован, даже если она есть. Вы хотите использовать какой-то набор (HashSet даст вам лучшую производительность найти и LinkedHashSet сохранит порядок. Даже TreeList даст вам лучшую производительность.)

0

TreeSet может быть вам полезной.

SortedSet<Integer> s = new TreeSet<Integer>(l); 
+0

Обратите внимание, что это также приведет к удалению дубликатов, которые могут быть не такими, какие хотят пользователи705414. – Jesper

+0

Да, вы правы, но главная цель проблемы состоит в том, чтобы сделать ** l.contains ** более быстрым. –

7

Сортировка списка не будет содержать операцию быстрее. В худшем случае все равно O (n).

Однако вы можете сортировать свой список и выполнять бинарный поиск на нем.

Collections.sort(l); 
Collections.binarySearch(l, a); 

В худшем случае это займет время O (lg (n)).

Но если вы хотите, чтобы высокая производительность включала операцию, рассмотрите возможность использования HashSet вместо ArrayList. Это занимает почти постоянное время.

0

Если Collections.sort(l) не дает желаемого результата, попробуйте Collections.sort(l, comparator) где «компаратор» что-то вроде этого:

class MyComparator implements Comparator<Integer> 
{ 
    public int compare(Integer lhs, Integer rhs) 
    { 
    // perform the desired comparison. 
    } 
} 

Edit: Я оставлю это, но ответ на «Майрбек Khadikov», кажется, быть лучшим ответом.