Java设置与列表

时间:2016-10-04 22:37:50

标签: java

有人可以建议我在java中满足以下条件的数据类型/结构: 1)没有固定的尺寸 2)不自动排序数据。数据应按其到达的顺序存储 3)它应该只存储唯一的条目 4)它的元素是可访问的或至少应该是第一个元素!

链接无法维护唯一条目。 我尝试使用Sets但它会自动更改我的数据顺序,我不想让它发生。 所以我现在正在尝试使用LinkedHashSet,但我无法找到访问相同的第一个元素的确切方法进行比较。

请提出任何建议。谢谢!

3 个答案:

答案 0 :(得分:4)

如果您不想编写自己的结构,可以使用LinkedHashSet。获取元素可能有点棘手,试试这个:

Integer lastInteger = set.stream().skip(set.size()-1).findFirst().get();

这将是最后一个元素,如果你想要不同的元素,你需要跳过不同的计数。这只是其中一种方法,您可以获取迭代器并自行迭代等。使用集合时,请记住覆盖hashCodeequals

答案 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实现构建自己的。