Лучшее общее решение (где вы не знаете фактический класс набора):
Element first = set.iterator().next();
Если известно, что установленный класс равен SortedSet
(например, TreeSet
или ConcurrentSkipListSet
), то лучшим решением будет:
Element first = ((SortedSet) set).first();
В обоих случаях будет выдано исключение, если набор пуст; проверьте Javadocs. Исключения можно избежать, используя Collection.isEmpty()
.
Первое решение - O(1)
во времени и пространстве для HashSet
или LinkedHashSet
, но обычно хуже для других видов сетов.
Второй - O(logN)
во времени и не использует места для TreeSet
или ConcurrentSkipListSet
.
Подход к созданию списка из заданного содержимого и последующему вызову List.get(0)
дает плохое решение, поскольку первым шагом является операция O(N)
, как во времени, так и в пространстве.
Я не заметил, что N
на самом деле 1
. Но даже в этом случае создание итератора, вероятно, будет дешевле, чем создание временного списка.