有人可以建议我在java中满足以下条件的数据类型/结构: 1)没有固定的尺寸 2)不自动排序数据。数据应按其到达的顺序存储 3)它应该只存储唯一的条目 4)它的元素是可访问的或至少应该是第一个元素!
链接无法维护唯一条目。 我尝试使用Sets但它会自动更改我的数据顺序,我不想让它发生。 所以我现在正在尝试使用LinkedHashSet,但我无法找到访问相同的第一个元素的确切方法进行比较。
请提出任何建议。谢谢!
答案 0 :(得分:4)
如果您不想编写自己的结构,可以使用LinkedHashSet
。获取元素可能有点棘手,试试这个:
Integer lastInteger = set.stream().skip(set.size()-1).findFirst().get();
这将是最后一个元素,如果你想要不同的元素,你需要跳过不同的计数。这只是其中一种方法,您可以获取迭代器并自行迭代等。使用集合时,请记住覆盖hashCode
和equals
。
答案 1 :(得分: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的答案。
答案 2 :(得分:0)
如果我正确理解了您的问题,那么您正在寻找一种数据结构,它将Set和ArrayList的属性组合在一起,这是一种&#34; ArraySet&#34;。
我还没有在核心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实现构建自己的。