黑馬程序員——Java1.5新特性

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity開發</a>、<a href="http://www.itheima.com"target="blank">.Net培訓</a>、期待與您交流! ----------------------

 

Jdk5.0新特性: 

Collectionjdk1.5以後,有了一個父接口Iterable,這個接口的出現的將iterator方法進行抽取,提高了擴展性。 

-------------------------------------------------- 

增強for循環: 

 foreach語句,foreach簡化了迭代器。 

格式:// 增強for循環括號裏寫兩個參數,第一個是聲明一個變量,第二個就是需要迭代的容器 

for( 元素類型 變量名 : Collection集合 & 數組 ) { 

 } 

高級for循環和傳統for循環的區別: 

高級for循環在使用時,必須要明確被遍歷的目標。這個目標,可以是Collection集合或者數組,如果遍歷Collection集合,在遍歷過程中還需要對元素進行操作,比如刪除,

需要使用迭代器。 

如果遍歷數組,還需要對數組元素進行操作,建議用傳統for循環因爲可以定義角標通過角標操作元素。如果只爲遍歷獲取,可以簡化成高級for循環,它的出現爲了簡化書寫。 

高級for循環可以遍歷map集合嗎?不可以。但是可以將map轉成set後再使用foreach語句。 

1、作用:對存儲對象的容器進行迭代: 數組  collection   map 

2)、增強for循環迭代數組: 

String [] arr = {"a", "b", "c"};//數組的靜態定義方式,只試用於數組首次定義的時候 

for(String s : arr) { 

System.out.println(s); 

3)、單列集合 Collection 

List list = new ArrayList(); 

list.add("aaa"); 

// 增強for循環沒有使用泛型的集合能不能使用增強for循環迭代?能

for(Object obj : list) { 

String s = (String) obj; 

System.out.println(s); 

4)、雙列集合 Map 

Map map = new HashMap();

 map.put("a", "aaa"); 

// 傳統方式:必須掌握這種方式 

Set entrys = map.entrySet(); // 1.獲得所有的鍵值對Entry對象 

iter = entrys.iterator(); // 2.迭代出所有的

entry while(iter.hasNext()) { 

Map.Entry entry = (Entry) iter.next(); 

String key = (String) entry.getKey(); // 分別獲得keyvalue

 String value = (String) entry.getValue(); 

System.out.println(key + "=" + value); 

// 增強for循環迭代:原則上map集合是無法使用增強for循環來迭代的,因爲增強for循環只能針對實現了Iterable接口的集合進行迭代;Iterablejdk5中新定義的接口,就一個方法iterator方法,只有實現了Iterable接口的類,才能保證一定有iterator方法,java有這樣的限定是因爲增強for循環內部還是用迭代器實現的,而實際上,我們可以通過某種方式來使用增強for循環。

 for(Object obj : map.entrySet()) { 

Map.Entry entry = (Entry) obj;  // obj 依次表示Entry 

System.out.println(entry.getKey() + "=" + entry.getValue()); 

5、集合迭代注意問題:在迭代集合的過程中,不能對集合進行增刪操作(會報併發訪問異常);可以用迭代器的方法進行操作(子類listIterator:有增刪的方法)。

6)、增強for循環注意問題:在使用增強for循環時,不能對元素進行賦值; 

int[] arr = {1,2,3}; 

for(int num : arr) {

num = 0; //不能改變數組的值 } 

System.out.println(arr[1]); //2 

-------------------------------------------------- 

可變參數(...): 

用到函數的參數上,當要操作的同一個類型元素個數不確定的時候,可是用這個方式,這個參數可以接受任意個數的同一類型的數據。 

和以前接收數組不一樣的是: 

以前定義數組類型,需要先創建一個數組對象,再將這個數組對象作爲參數傳遞給函數。現在,直接將數組中的元素作爲參數傳遞即可。底層其實是將這些元素進行數組的封裝,而這個封裝動作,是在底層完成的,被隱藏了。所以簡化了用戶的書寫,少了調用者定義數組的動作。 

如果在參數列表中使用了可變參數,可變參數必須定義在參數列表結尾(也就是必須是最後一個參數,否則編譯會失敗。) 

如果要獲取多個int數的和呢?可以使用將多個int數封裝到數組中,直接對數組求和即可。 

--------------------------------------------------- 

靜態導入:導入了類中的所有靜態成員,簡化靜態成員的書寫。 

import static java.util.Collections.*;  //導入了Collections類中的所有靜態成員 

 ---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity開發</a>、<a href="http://www.itheima.com"target="blank">.Net培訓</a>、期待與您交流! ----------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章