2015-02-23 2 views
-1

Вот интересный метафорический вопрос:
Предположим, у меня есть список людей, а люди - великие па, отцы и дети.
Сортировка ArrayList с собственностью объекта

Eg:(badly scrambled) 
[Kid1, Kid2, GrandPa2, GrandPa3, Father1, Father3, Kid4, Father4, kid5] 

Я хочу, чтобы отсортировать их, как:

[Father1-Kid1, GrandPa2, Kid2, GrandPa3-Father3, Father4-Kid4, Kid5] 

Просто замените приведенный выше список в - с, и это будет список Afterall.

Как я могу сортировать такой способ? Я попробовал Comparator, и он стал очень сложным, и многие матчи убивают производительность.

PS- Я работаю в среде, в которой расходуется каждый миллион JVM, пожалуйста, проведите меня через какой-то оптимальный способ.

Примечание: не использовать ничего, кроме списка.

Что я сделал до сих пор:
Поместите все дедушек в списке, а затем добавить отца в соответствующий индекс дедушкой, то же самое сделать для детей. Это прекрасно работает, я думаю, может ли это быть быстрее?

+2

Вы пробовали что-нибудь? Что касается вашей оптимизации, сосредоточьтесь на том, чтобы заставить ее работать в первую очередь. – mhawke

+0

Компьютер может выполнять 50 миллионов инструкций за одну миллисекунду. Для компьютера компьютер длится миллисекунд. –

+1

Опубликовать компаратор, который вы попробовали. –

ответ

2

Возможно, вам не следует использовать список. Используйте некоторую древовидную структуру для представления иерархии элементов (или леса, если некоторые элементы не связаны). Затем обход этого дерева может создавать элементы в том порядке, в котором вы хотите.

+0

Он говорит, что он должен использовать «Список», так что это пахнет домашней работой. –

1

Вы можете сгруппировать все записи по номеру в список коллекции для идентификатора. например все заканчивается в 1 идет в список [1], и все, оканчивающееся на 2, входит в список [2]. После того, как записи отсортированы по числу, вы можете объединить эти записи по мере необходимости.

Это должно дать вам приблизительное время O (N).

Смежные вопросы