java 在java中集合中迭代是怎么一回事兒?為什么要進行集合的迭代?
在java中集合中迭代是怎么一回事兒?為什么要進行集合的迭代?事實上,嚴格地說,迭代是一種設計模式。迭代的目的是遍歷某一類型數據集的內容,而不知道該類型數據的數據結構。實現思想是定義一個迭代器接口,它
在java中集合中迭代是怎么一回事兒?為什么要進行集合的迭代?
事實上,嚴格地說,迭代是一種設計模式。迭代的目的是遍歷某一類型數據集的內容,而不知道該類型數據的數據結構。
實現思想是定義一個迭代器接口,它至少聲明兩個方法:hasnext()和next()。通過hasnext()判斷是否有遍歷元素,并通過next()返回遍歷元素。對于具體的實現,我們可以根據不同的需求創建不同的實現類。
換句話說,迭代沒有編程語言屬性,但幾乎所有編程語言都支持迭代。
在Java中,無需迭代即可遍歷集合。當然,無需迭代的遍歷僅限于list接口的實現類。因為列表接口指定了可以通過集合索引獲得相應的值,所以無論列表是通過數組實現還是通過鏈表實現。
但是,Java中的集合不僅是列表,而且是集合。這種非列表集合不能通過索引獲得指定的元素,因此使用迭代方法。
除了list和set之外,Java還有一個雙列集合,也稱為鍵值對集合。但是,這種集合遍歷不能直接迭代。相反,我們使用折衷方法,要么先獲取鍵值集,要么通過遍歷鍵值遍歷映射,要么獲取鍵值集地圖輸入橫穿。
總之,迭代法不屬于任何編程語言,它只是一種設計思想,但大多數編程語言都會實現它,包括Java。
java循環中不改變循環變量是規范嗎?
您好,我不知道您的意思是foreach循環變量的名稱不能更改還是for循環中集合中的元素不能更改。
如果它是第一個,我認為它應該被視為一個語言規范,特別是在foreach循環中。實際上,變量名通常是不變的,因為我們不會對變量名做太多處理。它實際上是中間的一個臨時變量,類似于我們有一個數組,數組的每個元素在參與邏輯處理時都會先得到,當涉及到這個元素時,比如array[i],我們可以直接用它來處理業務邏輯。但是,由于在foreach循環中不能以這種方式獲得臨時變量,因此會給出一個臨時變量,并且每個循環的變量名是相同的。
如果是第二個,我認為它肯定不是一個規范。在很多業務中,我們會修改相應的變量,包括更新或刪除。當然,我們在處理這些業務時需要使用迭代器,但是循環變量肯定可以修改。
java中foreach和迭代器在遍歷List集合,一些情況下為什么能使用集合自動的刪除方法刪除元素?
當您是<70時,倒數第二位是66。您沒有引發異常,因為以前的列表大小是5。刪除66后,列表大小為4。第一次遍歷列表大小為5的數組時,指針66位于index=4中。遍歷列表大小為4的數組時,指針66位于index=4中newlist.size文件()。
ArrayList中的此方法將判斷列表已被讀取,因此不會引發異常。
1]]2
3
公共布爾hasnext(){
返回光標!=size
}
A< 90,第二位變了,列表的大小也變了
看ArrayList的源代碼,調用這個方法檢查列表的大小是否每次都變,但是這個方法發生在hasnext方法之后
1
2
3
4
final void checkForComodification(){
if(modCount!=expectedModCount)
拋出新的ConcurrentModificationException()
}