DAY02java加強黑馬自學

泛型使用在集合上

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){
			
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章