1. 程式人生 > >第2章 增強for&泛型

第2章 增強for&泛型

Java

1.1 泛型1.1.1 泛型的引入
在前面學習集合時,我們都知道集合中是可以存放任意對象的,只要把對象存儲集合後,那麽這時他們都會被提升成Object類型。當我們在取出每一個對象,並且進行相應的操作,這時必須采用類型轉換

1.1.1.1 案例代碼五:

package com.itheima_03;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
 * 使用集合存儲自定義對象並遍歷
 * 由於集合可以存儲任意類型的對象,當我們存儲了不同類型的對象,就有可能在轉換的時候出現類型轉換異常,
 * 所以java為了解決這個問題,給我們提供了一種機制,叫做泛型
 * *
 */
public class GenericDemo {
public static void main(String[] args) {
//創建集合對象
Collection  c = new ArrayList();
//創建元素對象
Student s = new Student("zhangsan",18);
Student s2 = new Student("lisi",19);
//添加元素對象
c.add(s);
c.add(s2);
//遍歷集合對象
Iterator  it = c.iterator();
while(it.hasNext()) {
 String str = (String)it.next();
 System.out.println(str);

}
}
}

class Student {
String name;
int age;
public Student(String name,int age) {
this.name = name;
this.age = age;
}
}
以上代碼會發生強制轉換異常,原因就是String str = (String)it.next() ,存入集合的是Student,而強轉為String,String與Student之間沒有任何子父關系不能強轉,未使用泛型前有可能發聲強制轉換異常的問題
1.1.2 泛型的使用
  當類上定義<>的時候就可以使用泛型,例如ArrayList類的定義:
  class  ArrayList<E>,那麽我們在創建ArrayList對象的時候就可以指定<>中E的類型
  ArrayList<String> al=new ArrayList<String>(),那麽String就把E替換掉了
1.1.2.1 案例代碼六:

package com.itheima_03;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
 * 使用集合存儲自定義對象並遍歷
 * 由於集合可以存儲任意類型的對象,當我們存儲了不同類型的對象,就有可能在轉換的時候出現類型轉換異常,
 * 所以java為了解決這個問題,給我們提供了一種機制,叫做泛型
 *
 * 泛型:是一種廣泛的類型,把明確數據類型的工作提前到了編譯時期,借鑒了數組的特點
 * 泛型好處:
 * 避免了類型轉換的問題
 * 可以減少×××警告線
 * 可以簡化我們代碼的書寫
 *
 * 什麽時候可以使用泛型?
 * 問API,當我們看到<E>,就可以使用泛型了
 *
 */
public class GenericDemo {
public static void main(String[] args) {
//創建集合對象
Collection<Student> c = new ArrayList<Student>();
//創建元素對象
Student s = new Student("zhangsan",18);
Student s2 = new Student("lisi",19);
//添加元素對象
c.add(s);
c.add(s2);
//遍歷集合對象
Iterator<Student> it = c.iterator();
while(it.hasNext()) {
//String str = (String)it.next();
//System.out.println(str);
Student stu = it.next();
System.out.println(stu.name);
}
}
}

class Student {
String name;
int age;
public Student(String name,int age) {
this.name = name;
this.age = age;
}
}

1.2 增強for
增強for循環是JDK1.5以後出來的一個高級for循環,專門用來遍歷數組和集合的。它的內部原理其實是個Iterator叠代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作。
格式:
[AppleScript] 純文本查看 復制代碼
?
1
2
for(元素的數據類型 變量 : Collection集合or數組){
}
它用於遍歷Collection和數組。通常只進行遍歷元素,不要在遍歷的過程中對集合元素進行增刪操作。
1.2.1 案例代碼七:

package com.itheima_04;
import java.util.ArrayList;
import java.util.Collection;

/*
 * foreach:增強for循環,一般用於遍歷集合或者數組
 * 格式:
 * for(元素的類型 變量 : 集合或者數組對象) {
 * 可以直接使用變量;
 * }
註意:在增強for循環中不能修改集合,否則會出現並發修改異常。
public interface Iterable<T>
實現這個接口允許對象成為 "foreach" 語句的目標。

 */
public class ForEachDemo {
public static void main(String[] args) {
 //創建集合對象
Collection<String> c = new ArrayList<String>();
//添加元素
c.add("hello");
c.add("world");
c.add("java");
//增強for循環遍歷集合
/*for(Object obj : c) {
System.out.println(obj);
}*/
/*for(String s : c) {
System.out.println(s.toUpperCase());
}*/
for (String string : c) {
c.add("android");
System.out.println(string);
}
}
}

第2章 增強for&泛型