为什么我们不能使用ArrayList.get(-1)来获取java中ArrayList的最后一个元素?它虽然在python中工作

时间:2014-02-20 15:07:01

标签: java arraylist

ArrayList.get(-1) // why it will not return the last element?

3 个答案:

答案 0 :(得分:2)

如果你想要这种行为:

List<T> snake = new ArrayList<>(){
    @Override
    public T get(int i) {
        return super.get((i + size()) % size());
   }
};

这适用于任何i值。

答案 1 :(得分:1)

首先, Java 不是 Python (尽管Jython Java 中实现 Python )。其次,您应该阅读ArrayList上的JavaDoc - 它会抛出Exception

IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size())

最后,你可以这样做

myList.get(myList.size() - 1);

获取List中的最后一个元素(例如myList)。

答案 2 :(得分:0)

没有回答为什么不可能,因为这不在StackOverflow的范围内。

但是,使用Java 8时可以通过以下方式实现:

Optional<E> optE = eCollection.stream().reduce((previous, current) -> current);

如果它存在,一旦您使用optE.get()测试了状态,就可以通过optE.isPresent()获取它。

但是,我很确定这会导致性能下降,因为您正在减少流,而您实际上只是想检查最后一个值。

我有一些希望它会在Java 9中添加,如果有足够的人抱怨使用Java 8.因为在我的例子中你不能像获取第一个元素那样容易,这将是:

Optional<E> optE = eCollection.stream().findFirst()

修改,还请注意其他操作是否会进行findFirst()调用。例如filter()来电。