天天看點

黑馬程式員_高新技術_JAVA1.5新特性

---------------------- ASP.Net+Unity開發、.Net教育訓練、期待與您交流! ----------------------

增強for循環 

格式:

//增強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();

 //分别獲得key和value

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

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

// 增強for循環疊代:原則上map集合是無法使用增強for循環來疊代的,因為增強for循環隻能針對實作了Iterable接口的集合進行疊代;

Iterable是jdk5中新定義的接口,就一個方法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]);  

可變參數: ...

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

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

以前定義數組類型,需要先建立一個數組對象,再将這個數組對象作為參數傳遞給函數。

現在,直接将數組中的元素作為參數傳遞即可。底層其實是将這些元素進行數組的封裝,而這個封裝動作,是在底層完成的,被隐藏了。

是以簡化了使用者的書寫,少了調用者定義數組的動作。

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

如果要擷取多個int數的和呢?

可以使用将多個int數封裝到數組中,直接對數組求和即可。

可變參數的特點:相當于一個可邊長度的數組。

1.隻能出現在參數清單的最後

2.位于變量類型和變量名之間,前後有無空格都可以。

3.調用可變參數的方法時,編譯器為該可變參數隐含建立一個數組,在方法體中以數組的形式通路可變參數。

靜态導入:

當類名重名的時候,需要制定具體的包名

當方法重名時,指定具備所屬的對象或者類

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

---------------------- ASP.Net+Unity開發、.Net教育訓練、期待與您交流! ----------------------