获取ArrayList中最后添加的元素

8

如何获取ArrayList中最后添加的元素。我发现这里的解释说明了如何获得最后一个元素,但最后添加的元素是否总是最后一个元素呢?


3
如果您使用 add(element),它会将指定的元素附加到此列表的末尾。如果您使用 add(index, element),则可以将其放置在任何位置。 - Peter Lawrey
4个回答

14

是的,正如其他人所说,ArrayList 保留插入顺序。如果你想获取最后添加的元素 (仅在你始终使用 add(element) 添加元素时),只需键入以下内容:

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

你的答案在你提到的链接中 :)


5

是的,对于ArrayList而言,它保留了插入的顺序。

如果您通过指定索引add()在特定位置显式添加元素,则需要通过自定义ArrayList实现来设置插入时间,并在检索最新插入的元素时考虑该时间进行计算。

或者像Marko Topolnik建议的那样,最好使用一个指向最后插入项的引用,在删除时也要进行维护。

如果您不关心集合的唯一性属性,更好的选择是使用LinkedHashSet


1
除非您使用 add(index, element) 告诉它其他方式,否则不会发生改变。 - Peter Lawrey
1
不需要插入时间,那样会过度;只需记录最后添加的元素即可。但是这仅适用于您控制的类;从 OP 的问题判断,他似乎正在处理一个预先存在的 ArrayList - Marko Topolnik
@Marko,是的,那样会更好。 - jmj
除非您还想支持元素被“删除”并且仍然希望保留添加的最后一个元素的情况!那么像您的解决方案这样的东西将是唯一的选择,但仍无法保持时间,而只能保持添加操作的顺序。否则,很可能看到许多连续添加的相同元素具有相同的添加时间。 - Marko Topolnik

1

如果您使用add(element)签名,您在ArrayList中的最后一个元素总是最后插入的元素。

如果您使用add(index, element),则无法确定哪个是最后一个。创建ArrayList的子类以将最后插入的元素保存在特殊变量中是最简单的解决方案。


1
是的,不指定索引将会将元素添加到列表的末尾。
getLast
在Java 21+中,每个列表都继承了方便的getLast方法,该方法来自SequencedCollection接口。有关详细信息,请参阅JEP 431: Sequenced Collections。
List< String > letters = new ArrayList<>( List.of( "a" , "b" , "c" ) );
letters.add( "d" ) ;
String lastAddedLetter = letters.getLast() ;
lastAddedLetter = "d"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接