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--;
}
}
}
总结:这个在架构方面用的比较多,就相当于低级程序员用高级程序员的代码。