教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線:400-618-4000

Java培訓(xùn)之java難點(diǎn)解析(二十五)-Jdk5.0新特性

更新時(shí)間:2016年03月24日18時(shí)50分 來(lái)源:傳智播客Java培訓(xùn)學(xué)院 瀏覽次數(shù):

Jdk5.0新特性:
Collection在jdk1.5以后,有了一個(gè)父接口Iterable,這個(gè)接口的出現(xiàn)的將iterator方法進(jìn)行抽取,提高了擴(kuò)展性。
--------------------------------------------------
增強(qiáng)for循環(huán):foreach語(yǔ)句,foreach簡(jiǎn)化了迭代器。
格式:// 增強(qiáng)for循環(huán)括號(hào)里寫(xiě)兩個(gè)參數(shù),第一個(gè)是聲明一個(gè)變量,第二個(gè)就是需要迭代的容器
for( 元素類(lèi)型 變量名 : Collection集合 & 數(shù)組 ) {

}
高級(jí)for循環(huán)和傳統(tǒng)for循環(huán)的區(qū)別:
高級(jí)for循環(huán)在使用時(shí),必須要明確被遍歷的目標(biāo)。這個(gè)目標(biāo),可以是Collection集合或者數(shù)組,如果遍歷Collection集合,在遍歷過(guò)程中還需要對(duì)元素進(jìn)行操作,比如刪除,需要使用迭代器。
如果遍歷數(shù)組,還需要對(duì)數(shù)組元素進(jìn)行操作,建議用傳統(tǒng)for循環(huán)因?yàn)榭梢远x角標(biāo)通過(guò)角標(biāo)操作元素。如果只為遍歷獲取,可以簡(jiǎn)化成高級(jí)for循環(huán),它的出現(xiàn)為了簡(jiǎn)化書(shū)寫(xiě)。
 
高級(jí)for循環(huán)可以遍歷map集合嗎?不可以。但是可以將map轉(zhuǎn)成set后再使用foreach語(yǔ)句。
 
1)、作用:對(duì)存儲(chǔ)對(duì)象的容器進(jìn)行迭代: 數(shù)組  collection   map
2)、增強(qiáng)for循環(huán)迭代數(shù)組:
String [] arr = {"a", "b", "c"};//數(shù)組的靜態(tài)定義方式,只試用于數(shù)組首次定義的時(shí)候
for(String s : arr) {
System.out.println(s);
}
3)、單列集合 Collection:
List list = new ArrayList();
list.add("aaa");
// 增強(qiáng)for循環(huán), 沒(méi)有使用泛型的集合能不能使用增強(qiáng)for循環(huán)迭代?能
for(Object obj : list) {
String s = (String) obj;
System.out.println(s);
}
4)、雙列集合 Map:
Map map = new HashMap();
map.put("a", "aaa");
// 傳統(tǒng)方式:必須掌握這種方式
Set entrys = map.entrySet(); // 1.獲得所有的鍵值對(duì)Entry對(duì)象
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);
}
// 增強(qiáng)for循環(huán)迭代:原則上map集合是無(wú)法使用增強(qiáng)for循環(huán)來(lái)迭代的,因?yàn)樵鰪?qiáng)for循環(huán)只能針對(duì)實(shí)現(xiàn)了Iterable接口的集合進(jìn)行迭代;Iterable是jdk5中新定義的接口,就一個(gè)方法iterator方法,只有實(shí)現(xiàn)了Iterable接口的類(lèi),才能保證一定有iterator方法,java有這樣的限定是因?yàn)樵鰪?qiáng)for循環(huán)內(nèi)部還是用迭代器實(shí)現(xiàn)的,而實(shí)際上,我們可以通過(guò)某種方式來(lái)使用增強(qiáng)for循環(huán)。
for(Object obj : map.entrySet()) {
Map.Entry entry = (Entry) obj;  // obj 依次表示Entry
System.out.println(entry.getKey() + "=" + entry.getValue());
}
5)、集合迭代注意問(wèn)題:在迭代集合的過(guò)程中,不能對(duì)集合進(jìn)行增刪操作(會(huì)報(bào)并發(fā)訪問(wèn)異常);可以用迭代器的方法進(jìn)行操作(子類(lèi)listIterator:有增刪的方法)。
6)、增強(qiáng)for循環(huán)注意問(wèn)題:在使用增強(qiáng)for循環(huán)時(shí),不能對(duì)元素進(jìn)行賦值;
int[] arr = {1,2,3};
for(int num : arr) {
num = 0; //不能改變數(shù)組的值
}
System.out.println(arr[1]); //2
可變參數(shù)(...):用到函數(shù)的參數(shù)上,當(dāng)要操作的同一個(gè)類(lèi)型元素個(gè)數(shù)不確定的時(shí)候,可是用這個(gè)方式,這個(gè)參數(shù)可以接受任意個(gè)數(shù)的同一類(lèi)型的數(shù)據(jù)。
 
和以前接收數(shù)組不一樣的是:
以前定義數(shù)組類(lèi)型,需要先創(chuàng)建一個(gè)數(shù)組對(duì)象,再將這個(gè)數(shù)組對(duì)象作為參數(shù)傳遞給函數(shù)?,F(xiàn)在,直接將數(shù)組中的元素作為參數(shù)傳遞即可。底層其實(shí)是將這些元素進(jìn)行數(shù)組的封裝,而這個(gè)封裝動(dòng)作,是在底層完成的,被隱藏了。所以簡(jiǎn)化了用戶(hù)的書(shū)寫(xiě),少了調(diào)用者定義數(shù)組的動(dòng)作。
如果在參數(shù)列表中使用了可變參數(shù),可變參數(shù)必須定義在參數(shù)列表結(jié)尾(也就是必須是最后一個(gè)參數(shù),否則編譯會(huì)失敗。)。
如果要獲取多個(gè)int數(shù)的和呢?可以使用將多個(gè)int數(shù)封裝到數(shù)組中,直接對(duì)數(shù)組求和即可。
---------------------------------------------------
靜態(tài)導(dǎo)入:導(dǎo)入了類(lèi)中的所有靜態(tài)成員,簡(jiǎn)化靜態(tài)成員的書(shū)寫(xiě)。
import static java.util.Collections.*;  //導(dǎo)入了Collections類(lèi)中的所有靜態(tài)成員


本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://metathetuscanyresort.com/javaee 
0 分享到:
和我們?cè)诰€交談!