list.get(list.size() - 1)可以缩短吗?例如list.get(1)

  • 本文关键字:list get 例如 size java list
  • 更新时间 :
  • 英文 :


Java中是否有访问的"捷径"?数组列表(或数组)中的最后一个元素?

'short way' =没有重复var名(一次在get之前,一次在get中)。

我的动机是容易读/写/维护。

。访问最后一本书的最后一页:

c++:

LastPageOfLastBook  = MyLibraryVar.Books.back().Pages.back(); 

c# 8.0:

LastPageOfLastBook  = MyLibraryVar.Books[^1].Pages[^1]; 

Java:

LastPageOfLastBook  = MyLibraryVar.Books.get(MyLibraryVar.Books.size()-1)
.Pages.get(MyLibraryVar.Books.get(MyLibraryVar.Books.size()-1).Pages.size()-1);

更短,更容易维护/读/写。请注意,var名称可能更长,因此它可能更重要。还有,如果有人想要访问最后一行的最后一个词,最后一页的最后一本书……(即4个维度,而不是2个。)

(c#的数组,行为为那件事的ArrayList,猜同样是正确的Java)

###########其他与问题不直接相关的信息:

关于中的最后一个元素移到我自己的变量中,我在c++、c#和Java中都没有找到合适的解决方案。(javaik在这方面得分最高,因为它的"按索引删除"至少返回被删除的元素)。

c++有std::vector::pop_back()移除最后一个元素,std::vector::back()访问最后一个元素(感谢@sweenish)。c#有List[^1]访问最后,List.RemoveAt(^1)删除最后。但是c#/c++ remove返回项,在这方面,我更喜欢Java的方式而不是c++/c#)

'short way' =不调用'size()',也不重复var名

。只要习惯

E last = list.get(list.size() - 1);
// and
list.remove(list.size() - 1);

Java没有像list.get(-1)list.getLast()这样的简写,也没有类似于List的简写,这与其他语言不同。

迭代器

根据你打算做的事情,ListIterator:

可能也很有趣
ListIterator<E> iter = list.listIterator(list.size() - 1);

这给了你一个指向后面的迭代器,现在你可以在两个方向上遍历列表,并直接通过iter删除或添加元素。对于LinkedList,这些操作也会出现在O(1)中。

这更类似于c++的接口,都是关于"迭代器对象">

队列

请注意,还有一个接口Deque,它提供了对的直接访问。尾巴和。因此,它提供了像

这样的方法
  • getLast(),peekLast()
  • removeLast(),pollLast()
  • addLast(e),offerLast(e)

常用的实现是ArrayDeque(不是ArrayList),但也有LinkedList,它恰好也是List