java中提供了很多個集合,它們在存儲元素時,采用的存儲方式不同。我們要取出這些集合中的元素,可通過一種通用的獲取方式來完成。
Collection集合元素的通用獲取方式:在取元素之前先要判斷集合中有沒有元素,如果有,就把這個元素取出來,繼續在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。這種取出方式專業術語稱為迭代。
Iterator迭代器有
hasNext()方法:
用來判斷集合中是否有下一個元素可以迭代。如果返回true,說明可以迭代。
Next()方法:
用來返回迭代的下一個元素,並把指針向后移動一位。
圖解:
Collection接口描述了一個抽象方法iterator方法,所有Collection子類都實現了這個方法,並且有自己的迭代形式。
//1,創建集合對象。 Collection<String> coll = new ArrayList<String>(); coll.add("abc1"); coll.add("abc2"); coll.add("abc3"); coll.add("abc4"); //2.獲取容器的迭代器對象。通過iterator方法。 Iterator it = coll.iterator(); //3,使用具體的迭代器對象獲取集合中的元素。參閱迭代器的方法 while(it.hasNext()){ System.out.println(it.next()); } /* 迭代器for循環的形式的使用 for (Iterator it = coll.iterator(); it.hasNext(); ) { System.out.println(it.next()); } */
注意:在進行集合元素取出時,如果集合中已經沒有元素了,還繼續使用迭代器的next方法,將會發生java.util.NoSuchElementException沒有集合元素的錯誤。
集合中存儲其實都是對象的地址。
集合中可以存儲基本數值嗎?jdk1.5版本以后可以存儲了。因為出現了基本類型包裝類,它提供了自動裝箱操作(基本類型à對象),這樣,集合中的元素就是基本數值的包裝類對象。
存儲時提升了Object。取出時要使用元素的特有內容,必須向下轉型。
Collection<String> coll = new ArrayList<String>();
coll.add("abc");
coll.add("aabbcc");
coll.add("cat");
Iterator<String> it = coll.iterator();
while (it.hasNext()) {
String str = it.next();
//當使用Iterator<String>控制元素類型后,就不需要強轉了。獲取到的元素直接就是String類型
System.out.println(str.length());
}
增強for循環遍歷集合。
格式:
for(元素的數據類型 變量 : Collection集合or數組){
}
練習一:遍歷數組int[] arr = new int[]{11,22,33}; for (int n : arr) {//變量n代表被遍歷到的數組元素 System.out.println(n); }
練習二:遍歷集合 Collection<String> coll = new ArrayList<String>(); coll.add("a1"); coll.add("a2"); coll.add("a3"); coll.add("a4"); for(String str : coll){//變量Str代表被遍歷到的集合元素 System.out.println(str); }
增強for循環和老式的for循環有什么區別?
注意:新for循環必須有被遍歷的目標。目標只能是Collection或者是數組。
建議:遍歷數組時,如果僅為遍歷,可以使用增強for如果要對數組的元素進行 操作,使用老式for循環可以通過角標操作。