ArrayList遍歷輸出問題,關於Java中List的遍歷輸出問題

時間 2022-06-17 14:40:04

1樓:七月逆流成河

從你得到的結果看,你確實是獲得到了bean包下的category類的category物件。但是為什麼列印出來的是物件的字串表現形式?這是因為所有類繼承了object類,object類裡面有個string tostring()方法。

當使用system.out.println()方法輸出一個物件(相當於jsp,servlet中用的out.

println()方法),系統自動呼叫該物件的tostring()方法返回「執行時類名@十六進位制hashcode值」格式的字串。如果你想獲得真正的類包含的資訊,就自己重寫tostring()方法。

比如:class a}

2樓:匿名使用者

預設的tostring()方法的字串格式是:

類的包路徑 @ hashcode的八進位制表示。

bean.category是類名。

1da1a93是hashcode的八進位制表示方法。

你想列印正確就要過載tostring方法,讓這個方法列印出這個物件的資訊就可以了。

3樓:匿名使用者

it.next() 返回的是object 必須轉成你要的型別假設你list裡面存的是student那麼 你就得轉為student 才會有相應的屬性 不轉它列印出來的則是地址 既你儲存的物件在記憶體中的地址

4樓:匿名使用者

it.next() 把這句強制轉換成 實體類物件

category c=(category)it.next();

之後輸出c.你的屬性欄位就行了

5樓:匿名使用者

for(int i=0;i

6樓:匿名使用者

tostring();

j**a怎麼迴圈遍歷arraylist

7樓:匿名使用者

除了用for迴圈也可以用迭代器

arraylistal=new arraylist();

for(int i=0;i<10;i++)iteratorit=al.iterator();

while(it.hasnext())

8樓:

for(int i = 0; i

9樓:澤澤

for迴圈和while迴圈都行

10樓:匿名使用者

public class test }}

這樣可以不?

關於j**a中list的遍歷輸出問題

11樓:匿名使用者

這是因為索引問題,當你直接由後向前輸出時,此時list索引是從0開始的,而向前是-1,當然不會有值了,如果非要用這種方法的話,應該先向後遍歷,然後由後向前輸出。

12樓:匿名使用者

listiterator(int index) 返回列表中元素的列表迭代器(按適當順序),從列表的指定位置開始上面那句改為 listiteratoriter = all.listiterator(all.size()); 就行了

13樓:匿名使用者

一定要先從前向後才可以從後向前,要不然是不行的。public static void main(string args)

while (iter.hasprevious())}

j**a中遍歷arraylist的過程中刪除元素操作會發生併發修改異常?

14樓:匿名使用者

首先搞清楚不是x=n-1不報錯。是因為他避開了錯誤,實際當你用倒數第2個來刪除的時候,他就已經跳出迴圈,不會判斷最後以為,這是為什麼呢?

我們先看看加強for迴圈是怎麼實現的。都知道是通過迭代實現,那麼將for寫成迭代器來看。

iteratoritr = al.iterator();

while(itr.hasnext())

}以上就是加強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 時

丟擲異常concurrentmodificationexception,如果你呼叫迭代器的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()方法,所以不會丟擲異常,說白了,也就是迴圈次數少了一次。

結合著原始碼看,應該會比較清晰。

15樓:白菜一顆

arraylist 迴圈刪除的時候需要從後往前刪,因為刪了之後會把後面的所有元素向前移動,而最後空出來的那個會成為 null ,所以當你從前往後刪的時候前面刪除了後面補上,迴圈到後面的時候就有一部分成 null 了就報錯了

j**a中有關arraylist的iterator遍歷問題

16樓:gta小雞

讀arraylist的add方法的說明:public void add(int index, e element) 將element插入到第index個元素的前面,插入完成後element成為第index個元素。

C語言輸出問題,C語言的輸出問題?

d的名字叫做格式說明符.格式說明符由兩部分組成,前面是 號 後面是一個小寫字母 不同的格式說明符代表不同的輸出格式,這裡,前面這個 d就是將對應的變數c以整數形式輸出.後面這個 d就是將對應的變數d以整數形式輸出.f是浮點數格式,也就是將變數以小數點的形式輸出,比如c 1 printf f c 那螢...

C 序輸出問題,C語言反序輸出問題

這麼給你說吧。string arr new string hello word 你這個是對的,但是你想倒序輸出的時候就有問題了。你這個沒必要用字串陣列,字串也有索引的。string arr hello word for int i i 0 i 這個是在vs2008裡的語法,你用的response...

DZ輸出問題

天賦不重複了 說下飾品 現階段國服飾品用的大概有六個 薄片 灰蛇 恥辱 龍脊 背叛 狂暴 lz有了恥辱 其他五個從入手難度來看 龍脊其實是最容易的 glr現在出龍脊的概率非常大 組10個人親友團去拿一個並不難 其次就是狂暴者召喚 zam現在也是碾壓 沒事去打下 對於2分內的boss戰 狂暴的效果在背...