Java迭代器和Collection接口

在這里插入圖片描述

??各位小伙伴們大家好,歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄,在這個系列專欄中我將記錄淺學這本書所得收獲,鑒于 看到就是學到、學到就是賺到 精神,這波簡直就是血賺

💡涉及的知識點速通

  • 🛫 關于迭代器你都知道什么?
    • 🪂 什么是迭代器?
    • 🪂 迭代器的4個API
    • 🪂 如何使用迭代器?
  • 🛫 Collection集合接口知多少?
    • 🪂 為什么不使用數組而是集合?
    • 🪂Collection接口的API都有什么?
    • 🪂AbstractCollection類知多少?

🛫 關于迭代器你都知道什么?

🪂 什么是迭代器?

??所謂迭代的意思就是交換替代,迭代器并不是一種數據結構或者集合,而是可以過迭代器中的方法逐個訪問集合中的每個元素的一種方法。提到迭代器最重要的就是Iterator接口,所有想要使用迭代器迭代的結構都需要實現或者繼承這個接口

🪂 迭代器的4個API

??Iterator接口包含4個方法,分別是next、hasNext、remove、forEachRemaining,接下來在學習構造器如何使用之前我們先學習一下它的四種方法

??首先一開始構造器中的有一個類似于指針的標志,指在集合中第一個元素的前面,調用構器中的next方法會使這個"指針"的位置后移到第一和二個元素之間,然后返回它跨過的那個元素給構造器,也就是第一個元素,如果"指針"到最后一個元素后面再調用next方法的話就會導致拋出NoSuchElementException

??remove方法則是刪除當前元素,可以理解為next方法返回的那個元素,如果調用remove方法之前沒有調用next方法或者是使用remove方法刪除該元素之后都會導致構造器為空,此時調用remove方法就會導致程序拋出IllegalStateExceptions異常

??hasNext方法就是判斷迭代器是否還有可迭代的下一個元素,如果有的話就返回true否則返回false,為了避免上述兩種異常,remove方法每次都要配合另外兩種方法一起使用,每次調用next方法之前都使用hasNext方法判斷一下,避免沒有可迭代元素導致的異常,每一次調用remove之前都使用next方法獲得元素,避免迭代器為空導致的狀態異常

??forEachRemaining方法則可以直接遍歷迭代器中的每一個元素并調用方法參數中的Lambda表達式,直到迭代器將集合的元素全部迭代完為止

🪂 如何使用迭代器?

??接下來將結合上面的描述給出一個將集合中的元素全部刪除的標準代碼,然后再給出兩個錯誤的代碼,大家可以在使用迭代器的時候規避一下

正確寫法

// 創建一個ArrayList集合
Collection<String> strings = new ArrayList<>();
strings.add("a");
strings.add("b");
strings.add("c");
strings.add("d");// 獲得迭代器對象
Iterator<String> iterator = strings.iterator();// 使用while循環迭代集合中元素 使用hasNext方法判斷
while (iterator.hasNext()) {// 使用next獲取下一個元素iterator.next();// 刪除這個元素iterator.remove();// 打印集合中元素System.out.println(strings);
}

錯誤示范一

// 創建一個ArrayList集合
Collection<String> strings = new ArrayList<>();
strings.add("a");
strings.add("b");
strings.add("c");
strings.add("d");// 獲得迭代器
Iterator<String> iterator = strings.iterator();// 使用while循環迭代集合中元素 使用next方法判斷下一個元素是否為空
while (iterator.next() != null) {// 輸出這個元素System.out.println(iterator.next());
}

??第一個的錯誤原因:使用next方法判斷下一個元素是否為空,這樣就會導致"指針"到最后一個元素后面依舊會執行next方法,這樣就會導致拋出NoSuchElementException異常;而且next方法每調用一次都會將"指針"向后移動一位,哪怕只是用于if判斷。所以程序就會每隔一個元素輸出一次,最后拋出NoSuchElementException異常在這里插入圖片描述錯誤示范二

// 創建一個ArrayList集合
Collection<String> strings = new ArrayList<>();
strings.add("a");
strings.add("b");
strings.add("c");
strings.add("d");// 獲取迭代器對象 并使用while循環迭代集合中元素 使用hasNext方法判斷
while (strings.iterator().hasNext()) {// 獲取迭代器對象 并使用next獲取下一個元素 然后輸出System.out.println(strings.iterator().next());
}

??第二個的錯誤原因:每使用iterator方法獲得一次集合對應的迭代器對象,都會默認將"指針"放到第一個元素的前面,于是第二個錯誤示范中一直使用集合中的第一個元素"a"進行判斷有沒有下一個元素,所以會導致程序陷入死循環,循環體里也會一直創建結合的迭代器對象,并將"指針"放到第一個元素的前面,然后調用next方法輸出元素"a"在這里插入圖片描述

🛫 Collection集合接口知多少?

??集合大體上可以分為兩種,一種是單列的Collection集合,一種就是雙列的Map集合,所謂的單雙列可以理解為元素中數據的個數,單列集合一個數據作為元素存儲,雙列集合兩個具有映射關系的數據作為元素存儲。這一篇我們先學習Collection集合接口的內容,Collection集合按照元素存儲是否有序又可分為List集合、Set集合

??前面之所以先學習Iterator接口的原因就是,Collection接口繼承了Iteator接口,于是它的子接口set和list都可以使用迭代器對集合中的元素進行迭代

🪂 為什么不使用數組而是集合?

??在學習集合之前,我們將存儲多個對象或者元素的任務都交給了數組,但是數組存儲元素有以下缺點:數組一旦初始化之后,長度就確定不可修改,元素個數超出數組長度的話會拋異常。數組中提供的API很少,增加元素需要現將索引后的元素后移空出位置將元素添加進去,刪除元素需要刪除之后將后面的元素前移將空出來的位置補足,以上操作只能通過代碼實現并沒有現成的API可以使用。數組存儲數據的特點:有序、可重復,對于一些無需、不可重復的業務需求就很難滿足

??集合就可以很好的彌補數組的上述缺點,而且集合提供了一組較為完善的數據結構,我們可以根據具體的業務需求來選擇具體使用的集合類型。比如說存儲元素無序不可重復的Set集合,有序可重復的List集合,具有映射關系的Map集合等

🪂Collection接口的API都有什么?

在這里插入圖片描述

🪂AbstractCollection類知多少?

??以上給出的Collection接口中的API都是抽象方法,也就意味著每一個此接口的實現類都需要重寫這些抽象方法,實際上Collection接口的直接或者間接實現類有很多,如果每一個都需要重寫這些方法的話就會很是麻煩。于是Java類庫的設計者提供了AbstractCollection類,該類中只將size方法和Iterator方法聲明為抽象,其他方法都提供了默認實現,如果子類不提供這些方法的方法體的話就使用該類中的默認實現
??下圖可知,list、set集合的實現類都直接或者間接的繼承了AbstractCollection類,為的就是簡化重寫Collection接口的抽象方法
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535011.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535011.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535011.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

atlas安裝需要kafka嗎_Atlas 2.1.0 實踐(2)—— 安裝Atlas

在完成Atlas編譯以后&#xff0c;就可以進行Atlas的安裝了。Atlas的安裝主要是安裝Atlas的Server端&#xff0c;也就Atlas的管理頁面&#xff0c;并確保Atlas與Kafka Hbase Solr等組件的集成。Atlas的系統架構如下&#xff0c;在確保 底層在完成Atlas編譯以后&#xff0c;就可以…

ue4中隱藏燈光和相機圖標_[HDRP]物理燈光是什么?科普向

HDRP拋棄了Bulitin的燈光&#xff0c;改用物理單位以及物理屬性。那么物理燈光到底是什么&#xff1f;請點贊評論來支持作者&#xff0c;提前祝大家新年快樂。https://connect.unity.com/p/hdrp-wu-li-deng-guang-shi-shi-yao-ke-pu-xiang?connect.unity.com同步更新unity con…

私鑰經過哈希計算可以產生公鑰_「區塊鏈基礎概念100」:公鑰和私鑰 | 027

免責聲明&#xff1a;本文旨在傳遞更多市場信息&#xff0c;不構成任何投資建議。文章僅代表作者觀點&#xff0c;不代表火星財經官方立場。小編&#xff1a;記得關注哦投資區塊鏈&#xff0c;猛戳&#xff1a;火星財經App下載來源&#xff1a;學習區塊鏈原文標題&#xff1a;「…

關于List集合類ArrayList、LinkedList、Vector詳解

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄&#xff0c;在這個系列專欄中我將記錄淺學這本書所得收獲&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波簡直就是血賺 &#x1f4a1;涉及的知識點速通&#x1f6eb; 關于…

1562a檢測軟件_洛達1562a空間音頻版評測!!!

哈嘍大家好&#xff01;這里是小澤&#xff0c;一個不專業的Beatboxer~~~今天給大家帶來一期HQB最新空間音頻版洛達1562a耳機的評測視頻&#xff0c;建議先贊再看&#xff01;&#xff08;滑稽&#xff09;聽說你不點贊&#xff1f;昨晚拍了一晚&#xff0c;但是因為是第一次搞…

python 趣味編程課_青少年編程:Python趣味編程基礎入門課程

課程目錄 章節1:編程課前說明試看 課時1 編程課前說明07:49可試看 章節2:第一章 Python基礎-認識環境試看 課時2 1、什么是計算機程序和編程&#xff1f;08:48可試看 課時3 2、為什么學習編程&#xff1f;03:10可試看 課時4 3、Python的安裝11:48可試看 課時5 4、用Python編寫第…

shell181網格劃分_ANSYS中Shell181單元介紹誰知道

再畢業設計做模型中要應用到SHELL181單元&#xff0c;那么這個單元有什么好處誰能具體的告訴我下&#xff0c;我有英文但是有的地方翻譯不通。或者誰能幫我翻譯一下~謝謝~SHELL181issuitableforanalyzingth...再畢業設計做模型中要應用到SHELL181單元&#xff0c;那么這個單元有…

關于Set集合類你都知道什么?來自《卷Ⅰ》的靈魂提問

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄&#xff0c;在這個系列專欄中我將記錄淺學這本書所得收獲&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波簡直就是血賺 &#x1f4a1;涉及的知識點速通&#x1f6eb; 關于…

流程圖虛線框表示什么_UI設計|APP的交互線框布局設計

一.流程圖設計流程圖(Flow Chart)&#xff1a;用圖示的方式反映出特定主體為了滿足特定需求而進行的有特定邏輯關系的一系列操作過程。流程圖的四種基本結構&#xff1a;順序結構&#xff0c;條件結構(又稱選擇結構)&#xff0c;循環結構&#xff0c;分支結構。1.流程圖的常用符…

使用Redis完成商品秒殺業務

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的Redis 6專欄&#xff0c;在這個系列專欄中我對B站黑馬的Redis教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知識點速覽&#…

表格列隱藏_【excel每日提升】Excel隱藏列,不讓別人打開!

【新朋友】點擊標題下面藍色字“王俊東“關注。 【老朋友】點擊右上角&#xff0c;轉發或分享本頁面內容。excel系列課程excel特效系列課程開始了&#xff0c;今天第2節&#xff01;第1節&#xff1a;Excel有公式的單元格標記顏色&#xff0c;很簡單&#xff01;第2節&#xf…

map與weakmap,ES6 Map和WeakMap有什么區別?

Looking this and this MDN pages it seems like the only difference between Maps and WeakMaps is a missing "size" property for WeakMaps. But is this true? Whats the difference between them?解決方案The experienced JavaScript programmer will notice…

“畢業季”|一個java開發實習生的OFFER之路

哈嘍哈嘍大家好&#xff0c;這里是小扎扎的博客。相信有關注過我的好盆友們可能會發現我已經有一段時間沒有出來劃水了&#xff0c;那么這段時間小扎扎都在干什么呢&#xff1f;沒錯&#xff01;我確實是去找實習了&#xff01;接下來就給大家介紹一下本次戰役的戰況如何 活動地…

virtualbox 該內存不能為written_系統提示“該內存不能為read”的原因和解決辦法...

我們單位的電腦經常顯示這個對話框&#xff0c;已經有好幾年了&#xff0c;單位的老頭們都不怎么懂電腦&#xff0c;我本人也不愛管閑事。但是出現這種對話框的原因是什么呢&#xff1f;又怎么解決呢&#xff1f;一般電腦經常出現藍屏和死機&#xff0c;而且頻繁出現。有時會出…

插件properties_Mybatis3系列 - 4. mybatis-config的properties屬性詳解

前兩章簡單的講解了MyBatis的使用方式. 接下來先全局的說一下MyBatis的全局的xml配置詳細說明.XML格式定義-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">configuration 的映射文件(根據定義順序說明)properties 屬性…

【Redis 6】秒殺業務——分布式鎖

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的Redis 6專欄&#xff0c;在這個系列專欄中我對B站黑馬的Redis教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知識點速覽&#…

python讀取文件最后幾行_如何用python獲取文件的最后一行,文件可能會比較大

展開全部 #!/usr/bin/env python import os import sys def get_last_n_lines(logfile, n): blk_size_max 4096 n_lines [] with open(logfile, rb) as fp: fp.seek(0, os.SEEK_END) cur_pos fp.tell() while cur_pos > 0 and len(n_lines) < n: blk_size min(blk_si…

360oauth token是什么意思_Oauth/access token

oauth/access_token第三放應用使用開始的request_token來換取用戶授權過的Access_tokenURL格式標準的OAuth http返回格式HTTP請求方式POST請求數限制false請求參數oauth_consumer_key: 創建應用時生成的APP KEY。oauth_token:經過用戶授權的Request Token。oauth_signature_met…

【Swagger】看這一篇就夠了

各位小伙伴們大家好&#xff0c;歡迎跟著小扎扎一起學習【Swagger】這門技術&#xff0c;在本片博客中我對B站狂神的Swagger教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Swagger知識點…

python mockito arg_that_wqingxiao

偶然間在脈脈上看到了一道頭條的算法面試題按照題目的理解&#xff0c;簡單的寫了一個html網頁pool開始{{index}}{{index}}var vm new Vue({el: #vue_det,data: {list: [],i: 0},methods: {details: function () {return this.site " - 學的不僅是技術&#xff0c;更是夢…