看视频自学Java泛型

时间:2022-04-30 15:27:25

1.泛型

代码:

/**
 * 泛型
 * @author Boom
 *
 */
public class Demo1 {
	
	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("aaa");
		Integer i = (Integer) list.get(0);
		
		//区别,使用泛型避免转换错误
		List<String> list1 =new ArrayList<String>();
		list1.add("aaaa");
		list1.get(0);
	}
}

=============================================================

2.用传统方法和for的增强式遍历使用泛型的集合或数组 

    低级程序员使用高级程序员的代码

代码:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.hamcrest.core.Is;
import org.junit.Test;
/**
 * 泛型
 * @author Boom
 *
 */
public class Demo2 {
	
	@Test
	public void test1(){
		
		List<String> list =new ArrayList<String>();
		list.add("aa");
		list.add("bb");
		list.add("cc");
		
		//传统
		Iterator it = list.iterator();
		while(it.hasNext()){
			String value =(String) it.next();
			System.out.println(value);
		}
		//增强for
		for(String s : list){
			System.out.println(s);
		}
	}
	
	@Test
	public void test2(){
		
		//模拟数据
		Map<Integer, String> map = new LinkedHashMap<Integer,String>(); 
		map.put(1, "aaa");
		map.put(2, "bbb");
		map.put(3, "ccc");
		
		//传统 keyset 或者 entryset
		Set<Map.Entry<Integer, String>> set = map.entrySet();
		Iterator<Map.Entry<Integer, String>> it = set.iterator();
		while(it.hasNext()){
			Map.Entry<Integer, String> entry = it.next();
			int key =entry.getKey();
			String value =entry.getValue();
			System.out.println(key+"="+value);
		}
	
		//增强for
		for(Map.Entry<Integer, String> entry:map.entrySet()){
			int key =entry.getKey();
			String value =entry.getValue();
			System.out.println(key+"="+value);
		}
		
	}
	
	/**
	 * 泛型,低级程序员  能 使用高级程序员代码
	 */
	
	@Test
	public void test3(){
		//用泛型时,如果两天都使用到泛型,两边必须要一样
		
		// ArrayList<Object> list = new  ArrayList<String>();
		// ArrayList<String> list = new  ArrayList<String>();
		
		//相当于低级程序员能使用高级程序员代码
		ArrayList<String> list = new  ArrayList();
		ArrayList list1 = new  ArrayList<String>();
	}
}

=============================================================

3.泛型的擦除 (就是简写)

 

/**
 * 泛型的擦除
 * @author Boom
 *
 */
public class Demo3 {
	
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
	}
}

/**
 * 泛型的擦除
 * @author Boom
 *
 */
public class Demo4 {
	
	public static void main(String[] args) {
		ArrayList list = new ArrayList();
	}
}

===============================================================

4.自定义泛型方法 (<T>是对参数的声明)

代码:

/**
 * 自定义泛型方法
 * @author Boom
 * @param <V>
 *
 */
public class Demo5 {
	
	public void testa(){
		a("aaaa");
	}
	
	//<T> 是声明
	public <T> T a(T t){
		return null;
	}
	
	//可以定义多个泛型
	public <T,E,K,V> void b(T t,E e,K k,V v){
		
	}
}

=================================================================

5.自定义泛型--泛型类和反射泛型  (其实,就是在4的基础上把方法前的声明迁移到类上)

/**
 * 自定义泛型--泛型类和反射泛型
 * @author Boom
 * @param <V>
 *
 */
//可以把方法上的声明放到类上
public class Demo6<T,E,K,V> {
	
	public void testa(){
		//a("aaaa");
	}
	
	public T a(T t){
		return null;
	}
	
	
	public  void b(T t,E e,K k,V v){
		
	}
	
	//静态方法
	public static <T> void c(T t){
		
	}
	
}

=================================================================

6.用泛型自定义个数组内元素互换的泛型方法

public class Demo7 {

	// 编写一个泛型方法,实现指定位置上的数组元素的交换
	public <T> void swap(T arr[], int pos1, int pos2) {
		T temp = arr[pos1];
		arr[pos1] = arr[pos2];
		arr[pos2] = temp;
	}

	// 编写一个泛型方法,接收一个任意数组,并颠倒数组中的所有元素
	public <T> void reverse(T arr[]) {
		int start = 0;
		int end = arr.length - 1;
		while (true) {
			if (start >= end) {
				break;
			}
			T temp = arr[start];
			arr[start] = arr[end];
			arr[end] = temp;
			start++;
			end--;
		}
	}
}


总结:这个在架构方面用的比较多,就相当于低级程序员用高级程序员的代码。