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
。