⑴ java中如何刪除含相同文件名的文件
取得所有的文件名,迭代每個文件名,如果該名稱包含字元串"12345",則把該文件刪除。。。。
至於具體代碼。。自己編寫吧。。
⑵ java中 foreach 和迭代器在遍歷 List 集合 一些情況下為什麼能使用集合自動的刪除方法刪除元素
你a<70的時候是倒數第二位,也就是66,沒有拋出異常是因為之前list大小為5,你刪除66後,list大小為4,你第一次遍歷list大小為5的數組的時候,66的cursor在index = 4,當你刪除後,遍歷list大小為4的數組時, cursor = 4 = newlist.size()。
ArrayList里的這個方法就會判斷list已經讀取完畢了,所以不會拋出異常。
publicbooleanhasNext(){
returncursor!=size;
}
a < 90的時候在第二位就發生了變化,list的大小也發生了變化
看了下ArrayList的源碼,每次循環的時候都會call這個方法檢查list的大小是否發生了變化,但是這個方法是發生在hasNext方法之後的
(){
if(modCount!=expectedModCount)
();
}
⑶ JAVA中HashMap如何刪除元素
HashMap刪除元素根據其遍歷方式一般有兩種方法,實例演示如下:
一、採用foreach模式,適用於不需要修改HashMap內元素的遍歷,只需要獲取元素的鍵/值的情況。
1、遍歷如下:
原因在於,迭代器遍歷時,每一次調用 next() 函數,至多隻能對容器修改一次。上面的代碼則進行了兩次修改:一次添加,一次刪除。
⑷ Java中遍歷ArrayList的過程中刪除元素操作會發生並發修改異常
首先搞清楚不是x=n-1不報錯。是因為他避開了錯誤,實際當你用倒數第2個來刪除的時候,他就已經跳出循環,不會判斷最後以為,這是為什麼呢?
我們先看看加強for循環是怎麼實現的。都知道是通過迭代實現,那麼將for寫成迭代器來看。
Iterator<Object>itr=al.iterator();
while(itr.hasNext()){
Objecto=itr.next();
System.out.println(itr.hasNext());
if("n".equals(o)){
al.remove(o);
}
}
以上就是加強for循環的真正樣子。再來透析源代碼。
al.iterator():返回一個迭代器沒什麼好說的;
itr.hasNext():通過判斷cursor(游標) != size(長度)來決定是否結束循環,cursor(游標) 初始是0 每次經過itr.next() +1;當cursor==size時 會跳出循環,這也是為什麼倒數第2個不會出錯的主要原因;
itr.next(): 看源代碼可以發現每次在next()調用後,都會先調用checkForComodification()這個方法;
checkForComodification(): 主要作用是判斷itr迭代器數據是否和list一致,
有兩個參數,
第一個modCount 集合結構變動次數,如:一開始你add調用了7次,那麼這個數就是7,
第二個expectedModCount 在調用iterator()方法時,初始化值等於modCount ,
這個方法判斷當modCount !=expectedModCount 時
拋出異常,如果你調用迭代器的remove方法,expectedModCount 會重新賦值,但是你調用的是list的remove方法,那麼modCount 就會+1 而expectedModCount 不變,這就會造成modCount !=expectedModCount;
最後,看看為什麼倒數第2個不會拋異常:
當他遍歷到「n-1」時,cursor=6,然後調用remover(o)方法,size=6,這個時候調用了itr.hasNext()判斷cursor是否等於size,前面說過,當cursor==size時,跳出循環,那麼就不會進入next(),也就不會進入checkForComodification()方法,所以不會拋出異常,說白了,也就是循環次數少了一次。
結合著源碼看,應該會比較清晰。
⑸ JAVA iterator 迭代器模式的next() 的問題 求高手回答 謝謝! 真誠求學 在線等。
關於你的疑問,請參考我的學習筆記吧。
hasNext、next方法:迭代器用於遍歷集合元素。獲取迭代器可以使用Collection定義的方法:Iterator iterator()
迭代器Iterator 本身是一個介面,集合在重寫Collection的iterator()方法時利用內部類提供了迭代器的實現。Iterator提供了統一的遍歷集合元素的方式,其提供了用於遍歷集合的兩個方法:boolean hasNext()判斷集合是否還有元素可以遍歷。
E next() 返回迭代的下一個元素。
每一種集合的實現類都是各自的迭代器實現,不用關心具體迭代器的類型,只將他們當作迭代器用於遍歷集合元素即可。應當遵循「問-取-刪」模式,適用於while循環。
Iterator<String>it = c1.iterator(); --- 問的過程,詢問c1集合中是否還有元素
while( it.hasNext() )
{
String str = (String) it.next(); --- 取出來的是Object類型,所以需要轉換類型
}
注意:應建立在hasNext返回true的基礎上執行next()方法
迭代過程中,不能調用集合的相關方法來改變集合中的元素,不然會拋出異常。應使用迭代器自身提供的方法操作。迭代器的刪除方法是在原集合中刪除元素。在調用remove方法前必須通過迭代器的next()方法迭代過元素,那麼刪除的就是這個元素,並且不能連續接著調用remove。
While( it.hasNext() )
{
String str = (String) it.next();
if(「#」.equals ( str ) )
{ //凡是相互比較,應當讓字變數.equals(變數),可以避免遇到null空指針異常
it.remove();
}
}
⑹ java中什麼叫迭代,什麼叫迭代器
迭代:
是重復反饋過程的活動,其目的通常是為了逼近所需目標或結果。每一次對過程的重復稱為一次「迭代」,而每一次迭代得到的結果會作為下一次迭代的初始值。
重復執行一系列運算步驟,從前面的量依次求出後面的量的過程。此過程的每一次結果,都是由對前一次所得結果施行相同的運算步驟得到的。例如利用迭代法*求某一數學問題的解。
對計算機特定程序中需要反復執行的子程序*(一組指令),進行一次重復,即重復執行程序中的循環,直到滿足某條件為止,亦稱為迭代。
迭代器(Iterator)模式:
又叫做游標模式,它的含義是,提供一種方法訪問一個容器對象中各個元素,而又不需暴露該對象的內部細節。
注意:Java的集合框架的集合類,有的時候也稱為容器。
從定義上看,迭代器是為容器而生,它本質上就是一種遍歷的演算法。因為容器的實現千差萬別,很多時候不可能知道如何去遍歷一個集合對象的元素。Java為我們提供了使用迭代的介面,Java的所有集合類丟失進行迭代的。
簡單的說,迭代器就是一個介面Iterator,實現了該介面的類就叫做可迭代類,這些類多數時候指的就是java.util包下的集合類。
總結:
迭代器,提供一種訪問一個集合對象各個元素的途徑,同時又不需要暴露該對象的內部細節。java通過提供Iterator和Iterable倆個介面來實現集合類的可迭代性,迭代器主要的用法是:首先用hasNext()作為循環條件,再用next()方法得到每一個元素,最後在進行相關的操作。
(6)java迭代刪除擴展閱讀
首先,創建了一個List的集合對象,並放入了倆個字元串對象,然後通過iterator()方法得到迭代器。iterator()方法是由Iterable介面規定的,ArrayList對該方法提供了具體的實現,在迭代器Iteartor介面中,有以下3個方法:
1、hasNext()該方法英語判斷集合對象是否還有下一個元素,如果已經是最後一個元素則返回false
2、next()把迭代器的指向移到下一個位置,同時,該方法返回下一個元素的引用
3、remove() 從迭代器指向的Collection中移除迭代器返回的最後一個元素,該操作使用的比較少。
注意:從Java5.0開始,迭代器可以被foreach循環所替代,但是foreach循環的本質也是使用Iterator進行遍歷的。