集合框架(泛型概述和基本使用)
package cn.itcast_01;
import java.util.ArrayList;
import java.util.Iterator;
/*
?* ArrayList存儲字符串并遍歷
?*?
?* 我們按照正常的寫法來寫這個程序, 結果確出錯了。
?* 為什么呢?
?* 因為我們開始存儲的時候,存儲了String和Integer兩種類型的數據。
?* 而在遍歷的時候,我們把它們都當作String類型處理的,做了轉換,所以就報錯
?*了。
?* 但是呢,它在編譯期間卻沒有告訴我們。//其實在Myeclipse中已經告訴你了,×××警告線就告訴你了,這里隱含著類型安全問題,為什么有警告線,就是為了告訴你這里容易出問題
?* 所以,我就覺得這個設計的不好。
?* 回想一下,我們的數組
?* String[] strArray = new String[3];
?* strArray[0] = "hello";
?* strArray[1] = "world";
?* strArray[2] = 10;
?* 集合也模仿著數組的這種做法,在創建對象的時候明確元素的數據類型。這樣就不會在有問題了。
?* 而這種技術被稱為:泛型。
?*?
?* 泛型:是一種把類型明確的工作推遲到創建對象或者調用方法的時候才去明確的特殊的類型。參數化類型,把類型當作參數一樣的傳遞。(也就是說一開始不明確,到創建對象或者調用方法的時候才明確)
?* 比如 一開始我不明確什么類型,但是一造對象ArrayList<String> array = new ArrayList<String>();就要明確,為什么呢?因為集合說了集合可以放任何任意類型,而我知道我的集合放字符串,我就告訴你我放字符串
?* 我知道我放學生,我就告訴你ArrayList我放學生 ? 還有就是 只要在API看到這種 Iterator<E>就要明確類型
?* 格式:
?* <數據類型>
?* 此處的數據類型只能是引用類型。
?* 好處:
?* A:把運行時期的問題提前到了編譯期間
?* B:避免了強制類型轉換
?* C:優化了程序設計,解決了×××警告線
?*/
public class GenericDemo {
public static void main(String[] args) {
// 創建
ArrayList<String> array = new ArrayList<String>();
// 添加元素
array.add("hello");
array.add("world");
array.add("java");
// array.add(new Integer(100)); Integer是一個引用類型,而add()方法里面接收的是object類型,引用類型是object類型的一種
//array.add(10); // JDK5以后的自動裝箱,把這個通過反編譯工具,反編譯之后,為add.(Integer.valueof(10))
// 等價于:array.add(Integer.valueOf(10));
// 遍歷
Iterator<String> it = array.iterator();
while (it.hasNext()) {
// ClassCastException
// String s = (String) it.next();//這里要把Integer類型轉化為字符類型,所以要報錯,前三個可以,最后一個要報錯
String s = it.next();
System.out.println(s);
}
// 看下面這個代碼
// String[] strArray = new String[3];
// strArray[0] = "hello";
// strArray[1] = "world";
// strArray[2] = 10;這里要報錯
}
}
轉載于:https://blog.51cto.com/wangdenghui/1769053
總結
以上是生活随笔為你收集整理的集合框架(泛型概述和基本使用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ibatis增删改、批量增删改以及查询
- 下一篇: UIScrollView 的代理方法简单