2013-09-01 4 views
2

HashMultimap возвращает набор значений для заданного ключа. Как мне преобразовать этот набор java в отсортированный массив? Есть ли способ, кроме преобразования его в отсортированный список с помощью java.util.collections.sort (....), а затем с помощью массива?Как преобразовать набор в отсортированный массив с помощью java

+0

должна быть такой же вопрос, как это: http://stackoverflow.com/questions/740299/how-do-i-sort-a -set-to-a-list-in-java – MyChaOS

+0

Почему бы вам не использовать реализации сортировки? – redFIVE

+0

Если вам не нужен массив, а просто хотите, чтобы элементы Set были отсортированы, подумайте об использовании 'TreeSet' вместо' HashSet'. – yshavit

ответ

1

TreeSet реализует SortedSet. Создайте новый TreeSet со значениями, полученными из мультимапа.

HashMultimap<K,V> hm = new HashMultimap<>(); 

// (...) alter hm 

TreeSet<V> ts = new TreeSet<>(hm.values()); 
//or 
TreeSet<V> ts = new TreeSet<>(hm.get("key")); 

V[] ordered = (V[]) ts.toArray(); 

Я не знаю точно, насколько эффективна упорядоченная вставка, поэтому я не знаю, является ли это хорошим решением. Посмотрите подробное сравнение в документации Java.

Для справки: http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html

+0

В приведенной вами ссылке описывается эффективность: «Эта реализация обеспечивает гарантированное время записи журнала (n) для основных операций (добавление, удаление и содержит). – yshavit

+0

Если я создаю новый кусок дерева, у меня много памяти, если моя V - это большая структура данных .. и как я могу преобразовать treeet в массив – Alvin

4

Две линии:

Object[] array = set.toArray(); 
Arrays.sort(array); 
Смежные вопросы