摘要:博主有較強的強迫傾向今天強迫癥犯了,就想把代碼都精簡了結果發現一個關于循環遍歷迭代器的精簡的寫法,利用邏輯代數實現。是通過兩個函數和函數互相配合遍歷的。不可能拋出異常或返回所以,必為。
博主有較強的強迫傾向!
今天強迫癥犯了,就想把代碼都精簡了!
結果發現一個關于for循環遍歷Iterator迭代器的精簡的寫法,利用邏輯代數實現。
定義:
HashMapmap = new HashMap (); map.put("1","a"); map.put("2","b"); map.put("3","c"); map.put("4","d");
```java
Iterator it = map.values().iterator();//迭代器
- 一般的寫法: ```java for (; it.hasNext(); ) System.out.println(it.next());
可惜的是, Iterator不支持這樣的寫法,
最喜歡這種寫法了,不用考慮結束條件,又有循環變量s可以直接使用,不用擔心多次調用next()產生錯誤。
for(String s:it)//這樣是錯的,不支持。 System.out.println(s);
所以作為一個有強迫傾向的人, 希望找到一種接近上述特性的寫法。
天無絕人之路,
Java語言有一個我很喜歡的特性————允許在表達式中賦值!
流的IO讀寫操作就是一個十分典型的應用。
經驗告訴我,只要利用這個特性就能實現我的目的:
首先,明確Iterator一般是怎么遍歷的。
Iterator是通過兩個函數——hasNext()和next()函數互相配合遍歷的。
hasNext()判斷是否存在下個對象。
next()則返回下個對象并移動游標到下下個對象。
根據上述特性歸納一下,上述邏輯等價于:
每次循環
----hasNext()判斷
--------如果true則next()執行一次,
--------如果false就跳出循環。
接著,想一想for(初始化語句; 判斷表達式; 每次循環后語句)的特性:
一般for的初始化語句用定義一個下標變量來表示循環到哪里?
而一般的Iterator遍歷,因為有next()函數所以不用著for的初始化語句。
所以,
初始化語句可以定義下標變量,那么也當然可以用來定義一個循環變量!
另外,
Java允許賦值,那么上文提到的遍歷Iterator的邏輯就也可以歸納for的判斷表達式中!
最后,確定for的判斷表達式:
設表達式為A。
明顯地,A = hasNext(),才能正確地跳出循環。
并且,要在表達式A中完成一次賦值s=next()。
運用代數邏輯,演算如下:
A = A
A = A && true
true = 包含一次賦值的表達式
一般情況,當hasNext()為true時。next()不可能拋出異常或返回null
所以,next()!=null必為true。有:
true = (s = next()) != null
結果如下:
it.hasNext() && (s=(String) it.next()) != null
等價于 A = A && true,等價于 hasxNext(),完成了一次賦值
最終完整代碼:
HashMapmap = new HashMap (); map.put("1","a"); map.put("2","b"); map.put("3","c"); map.put("4","d"); Iterator it = map.values().iterator(); for (String s = null; it.hasNext() && (s=it.next()) != null; ) System.out.println(s);
這樣就既可以直接使用循環變量s, 又可以一行寫完for語句, 實在符合我的強迫傾向的審美。
同時Java的表達式是短路表達式,一旦hasNext()返回是false,后續的(s = next()) != null操作就不會繼續執行,防止遍歷到最后next()到空值而產生異常。
后記
當然,這不是什么很厲害的代碼,也寫得很啰嗦,估計沒人能靜下心,一路看到這里。
但是對于我來說是一次很好的邏輯整理,想出這表達只用了幾分鐘,但寫出這對文字卻用了我幾個小時(語言能力太差了)。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64184.html
摘要:刪除元素后,立即跳出,則正常退出,但不能向后繼續循環了刪除后立馬終端循環,會正常跳出,但代價是不能繼續向后循環了使用迭代器使用迭代器可,正確無誤的刪除,代碼簡潔優雅,推薦使用使用迭代器可,正確無誤的刪除注意這里時而不是 在工作中的許多場景下,我們都會使用到List這個數據結構,那么同樣的有很多場景下需要刪除List中的某一個元素或某幾個元素,那么我們該如何正確無誤地刪除List中的元素...
摘要:集合框架的基本接口類層次結構其中表示接口,表示實現類和在實際開發中,需要將使用的對象存儲于特定數據結構的容器中。實例是迭代器,擁有兩個方法方法迭代器用于遍歷集合元素。返回值則是轉換后的數組,該數組會保存集合中的所有元素。 Java Collections Framework是Java提供的對集合進行定義,操作,和管理的包含一組接口,類的體系結構。 Java集合框架的基本接口/類層次結構...
摘要:體現的就是適配器模式。數組對象集合世界中的機制機制集合世界中比較常見的錯誤檢測機制,防止在對集合進行遍歷過程當中,出現意料之外的修改,會通過異常暴力的反應出來。而在增強循環中,集合遍歷是通過進行的。 前言 學習情況記錄 時間:week 2 SMART子目標 :Java 容器 記錄在學習Java容器 知識點中,關于List的重點知識點。 知識點概覽: 容器中的設計模式 從Array...
摘要:我關注的賀老賀師俊前輩最近發表個這樣一條微博雖然這條微博沒有引起大范圍的關注和討論,但是作為新人,我陷入了思考。通過賀老的微博,對一個問題進行探究,最終找到核心成員的一文,進行參考并翻譯。 我關注的賀老—賀師俊前輩@johnhax 最近發表個這樣一條微博: showImg(https://segmentfault.com/img/remote/1460000010452807); 雖然...
摘要:具體原因在后面說明是必須實現的接口,返回了一個迭代器。迭代器,可以對已知集合進行遍歷操作。這里可以看出,循環最終其實是會使用方法獲取迭代器,來完成遍歷。 概述 迭代器,提供了在不了解集合內部實現方法的時候遍歷集合的能力。可以將容器內部實現與遍歷操作隔離、解耦。 使用迭代器實現一個簡單集合 通過自定義一個簡單集合,并在對其使用迭代器進行遍歷,達到掌握迭代器的目的。 集合描述 一個簡單的集...
閱讀 2861·2021-10-14 09:50
閱讀 1218·2021-10-08 10:21
閱讀 3646·2021-10-08 10:16
閱讀 3063·2021-09-27 14:02
閱讀 3135·2021-09-23 11:21
閱讀 2109·2021-09-07 10:17
閱讀 407·2019-08-30 14:00
閱讀 2105·2019-08-29 17:26