泛型使用在集合上
Jdk5.0的新特性
Jdk 1.1 1.2 1.3 1.4 5.0
**泛型
**枚舉
**靜態導入
**自動拆裝箱
**增加for循環
**可變參數
**反射
5、泛型的簡介
*爲什麼要使用泛型
——泛型一般使用在集合上
**比如我現在把一個字符的類型的值放入到集合裏面,這個時候,這個值放入到集合之後,失去本來的類型,只能是object類型,這個時候,我們想要進行類型轉化,倒是會出現錯誤,這個時候怎麼解決,就用泛型來解決。
*泛型在集合上如何使用泛型
-常用的集合 list set map(下面分別介紹)
-泛型的語法 集合 例如 list
*在泛型<>裏寫的是一個對象,String是一個對象,但是不能寫基本的數據類型,寫數據類型的包裝類
byte—Byte
short–Short
int—Integer
Long—Long
float-Float
double-Double
char—character
boolean-Boolean
*在list上使用泛型
List的三種實現:ArrayList InkedList Vector
作業: 三種實現的區別:ArrayList是數組 linkedlist是列表 vector是線程安全
ArrayList:
採用數組方式存儲數據,可以存儲null;
非線程安全集合;
讀取數據時速度快;
適用於快速隨機訪問元素。
LinkedList:
採用雙向鏈表存儲數據;
非線程安全集合;
插入和刪除數據時速度快;
適用於快速插入、刪除元素。
Vector:
採用數組方式存儲數據;
線程安全集合;
性能比ArrayList差。
遍歷list集合 有三種方式:
普通for循環 迭代器 增強for循環
代碼:
/**泛型在list上的使用
* @param args
*/
@Test
public void testList() {
// TODO Auto-generated method stub
List<String> list=new ArrayList<String>();//泛型是string類型
list.add("aaa");
list.add("bbb");
list.add("ccc");
//遍歷list集合 有三種方式
//普通for循環 迭代器 增強for循環
for(int i=0;i<list.size();i++){
list.get(i);//string
String s=list.get(i);
System.out.println(s);
}
System.out.println("=================");//區分線
//增強for循環
for( String s1:list){
System.out.println(s1);
}
System.out.println("=================");
//迭代器
Iterator<String> it=list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
*在set上使用泛型
—set上使用泛型 遍歷set有兩種方式 增強for循環和迭代器
—set遍歷的結果無序並且不出現重複元素
代碼:
//在set上使用泛型
@Test
public void testSet(){
Set<String> set=new HashSet<String>();
set.add("www");
set.add("qqq");
set.add("zzz");
//遍歷set集合有兩種方式
//迭代器和增強for循環
//增強for循環
for(String s2:set){
System.out.println(s2);
}
System.out.println("==================");
//迭代器
Iterator <String> it1=set.iterator();
while(it1.hasNext()){
System.out.println(it1.next());
}
System.out.println("=================");
}
*在map上使用泛型(¥¥¥)
—map的結構:key-value形式
—map的兩種遍歷方式:1.獲取所有的key,通過key得到value 使用get的方法 2.獲取key和value的關係
代碼如下:
public class TestDomol02 {
//在map是哪個使用泛型
@Test
public void testMap(){
Map<String,String> map=new HashMap<String,String>();//導包。map的結構就是:key-value,所以兩個string
map.put("aaa","111");
map.put("bbb","222");
map.put("ccc","333");
//遍歷map的方法
//1.獲取所有的key,然後通過key獲得value,使用get的方法
//2.獲取key和value的關係
//使用1,
//獲取所有的key
Set<String> sets=map.keySet();
//遍歷所有key返回的set
for(String key:sets){
//通過key得到value
String value=map.get(key);
System.out.println(key+":"+value);
}
System.out.println("=============");
//2.得到key和value的關係
Set<Entry<String, String>> sets1=map.entrySet();//導包 utli
//遍歷sets1
for( Entry<String, String> entry:sets1){
//entry是key和value的關係
String keyv=entry.getKey();
String valuev=entry.getValue();
System.out.println(keyv+":"+valuev);
}
System.out.println("========================");
}
6.泛型使用在方法中
*建立一個數組,實現指定位置上數組元素的交換
*方法相同,只是數據類型不同,這個時候可以使用泛型的方法
原:
private static void swap1(String[] arr2, int i, int j) {
// TODO Auto-generated method stub
String temp1;
temp1=arr2[i];
arr2[i]=arr2[j];
arr2[j]=temp1;
}
private static void swap1(int[] arr1, int i, int j) {
// 定義一箇中間變量 來實現交換
int temp;
temp=arr1[i];
arr1[i]=arr1[j];
arr1[j]=temp;
}
*使用泛型之後://使用泛型方法 需要定義一個類型,使用大寫字母來表示 T:這個T表示任何類型,寫在返回值 即void之前 ,這就表示你定義了一個類型T
//在下面就可以使用這個類型了T(隨便一個大寫字母)
public static <T> void swap1(T[] arr,int a,int b){
T temp;
temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
** 作業2:實現一個泛型方法,接受任意一個數組,顛倒數組中所有的元素
7.泛型在類上的使用(瞭解)
*在一個類上定義一個類型,這個類型可以在類裏面直接使用
public class TestDomo04 <T>{
//在類裏面可以直接使用T類型
T aa;
public void test11(T bb){
}
//寫一個靜態方法,在類上定義的泛型不能在靜態類型上使用 即T不能在static中使用,換一個泛型類型即可
public static <A> void test12(A cc){
}
}