#java
#java
Вопрос:
Может кто-нибудь предложить мне тип / структуру данных в java, которая удовлетворяет: 1) нет фиксированного размера 2) не сортирует данные автоматически. Данные должны храниться в том порядке, в котором они поступают 3) в нем должны храниться только уникальные записи 4) его элементы доступны или, по крайней мере, первый элемент должен быть!
ссылки не могут поддерживать уникальные записи. Я пытался работать с наборами, но это автоматически меняет порядок моих данных, чего я не хочу допускать. Итак, я сейчас пытаюсь работать с LinkedHashSet, но я не могу найти точный способ доступа к первому элементу того же самого для сравнения.
Пожалуйста, любые предложения. Спасибо!
Комментарии:
1. Связанный набор хэшей
2. Первый элемент просто
set.iterator().next()
.
Ответ №1:
Вы можете использовать LinkedHashSet
, если не хотите писать свою собственную структуру. Получение элементов может быть довольно сложным, попробуйте это:
Integer lastInteger = set.stream().skip(set.size()-1).findFirst().get();
Это приведет к получению последнего элемента, если вам нужны разные элементы, вам нужно пропустить другое количество. Это только один из способов, вы можете получить итератор и выполнить итерацию самостоятельно и т.д. Не забудьте переопределить hashCode
и equals
при работе с наборами.
Комментарии:
1. OP запрашивает только первый элемент, что очень просто, это просто
set.iterator().next()
.
Ответ №2:
LinkedHashSet
это правильная структура данных для ваших требований.
Вы можете получить доступ к первому элементу следующим образом:
Set<String> set = new LinkedHashSet<>();
set.add("a");
set.add("b"); // And so on
// Retrieve first element
// Will throw NoSuchElementException if set is empty
String firstElement = set.iterator().next();
// Retrieve and remove first element
Iterator<String> i = set.iterator();
String otherFirstElement = i.next();
i.remove();
Для доступа к другим элементам см. Ответ от @Whatzs .
Ответ №3:
Если я правильно понимаю ваш вопрос, вы ищете структуру данных, которая сочетала бы свойства набора и ArrayList, своего рода «ArraySet».
Я ничего не нашел в core java для этого, но похоже, что Android JDK имеет такую структуру данных.
https://developer.android.com/reference/android/util/ArraySet.html
https://android.googlesource.com/platform/frameworks/base/ /master/core/java/android/util/ArraySet.java
Одним из решений может быть создание собственного на основе реализации Android.