2016-02-09 5 views
1

У меня есть данные, последовательность которых так же важна, как и ее уникальные элементы. Значение, если что-то уже было добавлено, его не следует добавлять снова, и последовательность должна запоминаться.Создать список уникальных значений в java

Набор не запоминает последовательность, в которой он был добавлен (хеш или сортировка), а список не уникален.

Какое оптимальное решение этой проблемы?

Если у вас есть список и прокрутите его, чтобы проверить уникальность - чего я пытаюсь избежать. Или у вас есть две коллекции, одна из которых - List и одна Set - которую я также пытаюсь избежать. Или существует другое решение этой проблемы.

+0

использовать связанный HashSet – KVK

+1

«Set не помнит последовательность, в которой он был добавлен» [ 'LinkedHashSet'] (https://docs.oracle.com/javase/7 /docs/api/java/util/LinkedHashSet.html): «порядок итерации ... - это порядок, в котором элементы были вставлены в набор (порядок вставки)» –

+0

Возможный дубликат: http://stackoverflow.com/вопросы/8185090/есть,-ан-вставка-сохраняющее порядок набора, что-также орудия-лист –

ответ

0

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

От Docs:

Хеш таблицы и реализацией связанного списка интерфейса Set, с порядком предсказуемы итерации. Эта реализация отличается от HashSet тем, что она поддерживает двусвязный список, проходящий через все его записи. Этот связанный список определяет порядок итераций, который представляет собой порядок, в котором элементы были вставлены в набор (порядок вставки). Обратите внимание, что порядок вставки не изменяется, если элемент повторно вставлен в набор. (Элемент е повторно в множество s, если s.add (е) вызывается при s.contains (е) будет возвращена истина непосредственно перед вызовом.)

1

В сильфона коде была ваша ссылка

LinkedHashSet<String> al=new LinkedHashSet<String>(); 
    al.add("guru"); 
    al.add("karthik"); 
    al.add("raja"); 
    al.add("karthik"); 

    Iterator<String> itr=al.iterator(); 
    while(itr.hasNext()){ 
    System.out.println(itr.next()); 
    } 

выход

guru 
karthik 
raja 
0

LinkedHashSet является наилучшим выходом из

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