Ответ
Нет, напрямую по индексу — нельзя. Set — это коллекция, которая не гарантирует порядок элементов (кроме LinkedHashSet и TreeSet) и не предоставляет индексного доступа.
Как обойти это ограничение?
Если нужен доступ по позиции, Set можно преобразовать в List:
Set<String> set = new HashSet<>(Arrays.asList("A", "B", "C"));
// Преобразование Set в List
List<String> list = new ArrayList<>(set);
// Теперь доступ по индексу возможен
String element = list.get(1); // Получит второй элемент
Важные нюансы:
- Порядок: У
HashSetпорядок элементов непредсказуем.LinkedHashSetсохраняет порядок вставки, аTreeSet— порядок сортировки. Однако даже в этих упорядоченных реализациях методget(index)отсутствует. - Производительность: Преобразование в
Listи доступ по индексуget(i)имеют сложность O(1), но само созданиеArrayListтребует O(n) времени и памяти. - Альтернатива: Если часто нужен доступ по индексу, изначально используйте
ListилиArrayList.