gpt4 book ai didi

java - 如何获取集合的第n个元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:34 27 4
gpt4 key购买 nike

更具体地说:如何获得 LinkedHashSet 的第 n 个元素(它有一个可预测的迭代顺序)?我想检索插入到此 Set 中的第 n 个元素(尚未存在)。

使用 List 是否更好:

List<T> list = new ArrayList<T>(mySet);
T value = list.get(x); // x < mySet.size()

toArray(T [] a) 方法:

T [] array = mySet.toArray(new T[mySet.size()]);
T value = array[y]; // y < mySet.size()

除了(可能是轻微的)性能差异外,还有什么需要注意的吗?有明显的赢家吗?

编辑 1

注意:为什么我想要最后插入的元素并不重要,重要的是我想要它。 LinkedHashSet 之所以被特别选中,是因为它”定义了迭代顺序,即元素插入集合的顺序(插入顺序)。请注意,如果将元素重新插入集合,插入顺序不会受到影响”

编辑2

这个问题似乎已经演变为关于任何 Set 实现是否可以永远 保留原始插入顺序的讨论。所以我在 http://pastebin.com/KZJ3ETx9 放了一些简单的测试代码为了证明是的,LinkedHashSet 确实保留了插入顺序(与其迭代顺序相同),正如它的 Javadoc 所声称的那样。

编辑3

修改了问题的描述,这样大家就不会太专注于检索 Set 的最后一个元素(我原本认为问题的标题就足够了——显然我错了)。

最佳答案

此方法基于更新的要求返回第 n 个元素,而不仅仅是最后一个元素。如果来源是例如带有标识符 mySet 的集合,最后一个元素可以通过 nthElement(mySet, mySet.size()-1) 选择。

如果 nSet 的大小相比较小,则此方法可能比例如转换为 ArrayList

  /**
* Return an element selected by position in iteration order.
* @param data The source from which an element is to be selected
* @param n The index of the required element. If it is not in the
* range of elements of the iterable, the method returns null.
* @return The selected element.
*/
public static final <T> T nthElement(Iterable<T> data, int n){
int index = 0;
for(T element : data){
if(index == n){
return element;
}
index++;
}
return null;
}

关于java - 如何获取集合的第n个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24464279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com