亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于以Set集合為第二參數的foreach(第一參數:第二參數)


foreach結構中(第一參數:第二參數),第二參數應該為第一參數的數組,例如第一參數為int時,第二參數為int[];第一參數為float時,第二參數為float[];我看到課程中老師寫到for(Entry:Set),for(String:Set)這樣兩種不同的結構,因此我想問問Set的類型是隨著其元素的類型的不同而不同的嗎?例如元素為String類型,那么Set為String數組,元素為Entry類型,那么Set為Entry數組,是這樣嗎?

正在回答

3 回答

大體意思應該是這樣的。 set是集合不是數組。我在 想可不可以for(Set:Set) 有一個 Set集合里面裝的是不同的Set集合。

3 回復 有任何疑惑可以回復我~
#1

慕粉2304285705 提問者

非常感謝!
2016-12-28 回復 有任何疑惑可以回復我~

更準確的說法是:Set中元素為String類型,那么引用parm1為String類型,Set中元素為Entry類型,那么引用parm1為Entry類型。而實際上引用parm1可以是Set中元素的父類型和實現的接口類型。

因為ForEach(parm1:parm2)本質上是迭代器。以使用迭代器遍歷EntrySet為例

Set<Entry<String,String>>entrySet=studentMap.entrySet();

Entry<String,String>>iter=entrySet.iterator();
while(iter.hasnext()){
Entry<String,String>entry=iter.next();//迭代器中這一步可以對應foreach中--parm1:param2
//這里的entry是可以寫成其父類型的,賦值時的向上造型
}

ForEach循環語句判斷循環的條件是iter.hasnext(),

parm1(Entry<String,String>entry)是接受iter.next()對象的引用。parm1的類型可以是iter.next()對象的父類型或者實現的接口類型,但是由于泛型集合的約束和向上造型帶來的多態性。? 我們習慣把parm1和parm2中元素的類型保持一致。下面演示parm1是父類型,如下:

public?class?sonTest?extends?superTest{???????????
??????????????????????????????????????????????????
public?static?void?main(String[]?args)?{??????
????//?TODO?Auto-generated?method?stub????????
????Set<sonTest>sonSet=new?HashSet<sonTest>();
????for(int?i=0;i<10;i++){????????????????????
????sonSet.add(new?sonTest());????????????
????}?????????????????????????????????????????
????for(superTest?T:sonSet){?}??//編譯器沒有報錯,所以可以使用iter.next()對象的父類型或者實現的接口類型??????????????????????????????????????
????}?????????????????????????????????????????????
}?????????????????????????????????????????????????
class?superTest?{}

回答不易,沒有積分也希望能多多支持。說了這么多,其實就一句,foreach()是迭代器。

2 回復 有任何疑惑可以回復我~

是這樣的。循環出來的類型要和循環的類型基本保持一致。

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

關于以Set集合為第二參數的foreach(第一參數:第二參數)

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號