我知道無法在foreach循環中獲取索引。要麼我們需要使用正常循環,要麼使用在每次迭代中增加/減少的索引。JVM是否跟蹤Java中的foreach循環中的索引?如果是這樣,怎麼樣?
我也跟着這個問題。 Java, How do I get current index/key in 「for each」 loop。
我只想知道Java是否在每次迭代中保留任何索引。如果是這樣,怎麼樣?
我知道無法在foreach循環中獲取索引。要麼我們需要使用正常循環,要麼使用在每次迭代中增加/減少的索引。JVM是否跟蹤Java中的foreach循環中的索引?如果是這樣,怎麼樣?
我也跟着這個問題。 Java, How do I get current index/key in 「for each」 loop。
我只想知道Java是否在每次迭代中保留任何索引。如果是這樣,怎麼樣?
取決於。
這個循環有兩個版本,用於數組和Iterable
(比如List
)。
對於數組,編譯器將創建一個「普通」for (int i=0; i<arr.length; i++)
循環。所以在這裏你有這個指數。
對於Iterable
,它變成while(iter.hasMore()){
。所以循環本身沒有索引。根據Iterable
的實施情況,Iterator
內可能還有一個。
沒有設計辦法知道在foreach循環當前索引,它的工作原理不喜歡
for(int i = 0; i < list.length; i++)
但像:
Iterator<String> iter = list.iterator();
while (iter.hasNext())
我想你已經知道,一個類的任何實例實現Iterable
接口可以在foreach
循環中使用。對於任何有限的對象集合,如果不進行某種內部管理(大多數情況下是索引),則無法實現Iterator
。所以,實際上索引存儲在某個地方,儘管我們無法訪問它。
看看iterator
方法的AbstractList
實現,看看它是如何實現的。
JLS [§14.14.2]中的所有血淋淋細節(https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14.2) 。 –