/**
* JDK1.5前不支持泛型,那时候的泛型是这样的
*/
public static void notUseGeneric(){
List list = new ArrayList();//没有泛型时,可添加所有类型
list.add("爷爷今年");
list.add(89);
list.add("岁了");
String s1 = (String) list.get(0);
System.out.println(s1);
//String age = (String) list.get(1); //会报类型转换异常class java.lang.Integer cannot be cast to class java.lang.String
//System.out.println(age);
Integer age2 = (Integer) list.get(1);
System.out.println(age2+"");
String s2 = (String) list.get(2);
System.out.println(s2);
}
输出结果:
爷爷今年
89
岁了
/**
* JDK1.5后支持泛型
*/
public static void useGeneric(){
//使用泛型后<>内表示限定集合中只能放某种类型的元素
List<String> list = new ArrayList<>();
list.add("奶奶今年");
//list.add(85); //这里输入int,编译器会报红,提示只能输入String类型
list.add("85");
list.add("岁");
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
}
输出结果:
奶奶今年
85
岁
使用了泛型无需进行强转
===================================================
在集合中使用泛型
/**
* 在集合中使用泛型
*/
public static void genericInColection() {
Set<Integer> integers = new HashSet<>();
integers.add(1);
integers.add(2);
integers.add(3);
//迭代器遍历
System.out.println("===================迭代器遍历===================");
Iterator<Integer> iterator = integers.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println("===================迭代器遍历===================\n");
System.out.println("===================foreach遍历===================");
//foreach遍历
//Integer:表示集合中元素类型,integer:集合中每个元素的代称 integers:表示你要遍历的集合
for (Integer integer : integers) {
System.out.println(integer);
}
System.out.println("===================foreach遍历===================\n");
System.out.println("===================map中的泛型===================");
Map<Integer, String> maps = new HashMap<>();
maps.put(1, "林冲");
// maps.put("2","李逵");//key在泛型声明中是使用Integer,put的时候不能用String
maps.put(2, "李逵");
maps.put(3, "鲁智深");
Set<Map.Entry<Integer, String>> sets = maps.entrySet();
for (Map.Entry<Integer, String> set : sets) {
System.out.println("key为:" + set.getKey() + " " + "value为:" + set.getValue());
}
System.out.println("===================map中的泛型===================\n");
//泛型不接受8中基本数据类型,必须申明引用类型
// List<int> list = new ArrayList<>(); //编译时报错,int是基本类型
//Apple继承Fruit,但List<Apple>和List<Fruit>没有继承关系
//List<Fruit> list = new ArrayList<Apple>();
List<Fruit> list = new ArrayList<>();
}
输出结果:
===================迭代器遍历===================
1
2
3
===================迭代器遍历===================
===================foreach遍历===================
1
2
3
===================foreach遍历===================
===================map中的泛型===================
key为:1 value为:林冲
key为:2 value为:李逵
key为:3 value为:鲁智深
===================map中的泛型===================
交换数组里两元素的位置
交换Integer数组里两元素的位置
/**
* 交换Integer数组里两元素的位置
* @param intArr 数组
* @param index1 元素的下标
* @param index2 元素的下标
*/
public static void changeIntArrPos(Integer[] intArr ,int index1,int index2){
System.out.println("==================交换Integer数组里两元素的位置==========================");
int temp = intArr[index1];
intArr[index1] = intArr[index2];
intArr[index2] = temp;
System.out.println(Arrays.toString(intArr));
System.out.println("==================交换Integer数组里两元素的位置==========================\n");
}
交换String数组里两元素的位置
/**
* 交换String数组里两元素的位置
* @param strArr 数组
* @param index1 元素的下标
* @param index2 元素的下标
*/
public static void changeStringArrPos(String[] strArr ,int index1,int index2){
System.out.println("==================交换String数组里两元素的位置==========================");
String temp = strArr[index1];
strArr[index1] = strArr[index2];
strArr[index2] = temp;
System.out.println(Arrays.toString(strArr));
System.out.println("==================交换String数组里两元素的位置===========================\n");
}
用泛型方法交换数组里两元素的位置
/**
* 用泛型方法交换数组里两元素的位置
* @param arr 数组
* @param index1 元素的下标
* @param index2 元素的下标
*/
public static <T> void changeArrPos(T[] arr , int index1, int index2){
T temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
System.out.println(Arrays.toString(arr));
}
//交换String数组里两元素的位置
String[] strArr = {"我爷爷","今年","89岁了"};
changeStringArrPos(strArr,0,2);
//交换String数组里两元素的位置
Integer[] intArr = {2,5,8,9,6,7};
changeIntArrPos(intArr,0,4);
System.out.println("==================用泛型方法交换数组里两元素的位置===========================");
changeArrPos(strArr,0,2);
changeArrPos(intArr,0,4);
System.out.println("===================用泛型方法交换数组里两元素的位置==========================\n");
输出结果:
image.png
用泛型方法做的list遍历
/**
* 用泛型方法做的list遍历
* @param lists 要遍历的列表
* @param <T> 传入的类型
*/
public <T> void printList(List<T> lists){
for (T list : lists) {
System.out.println(list);
}
}
System.out.println("===================用泛型方法做的list遍历==========================\n");
List<String> stringList = new ArrayList<>();
stringList.add("我爸爸是");
stringList.add("java工程师");
stringList.add("我妈妈是");
stringList.add("病毒科学家");
GenericTest gt = new GenericTest();
gt.printList(stringList);
List<Integer> intList = new ArrayList<>();
intList.add(5);
intList.add(7);
intList.add(0);
intList.add(3);
gt.printList(intList);
System.out.println("===================用泛型方法做的list遍历==========================\n");
输出结果:
image.png
注意:
在泛型的lists遍历方法中,不能使用add方法,除非是add(null),因为集合的add方法是list.add(T t),要求类型为T,但是T是一个泛型,真正的类型在使用的时候确定,那么此时不能确定T的类型,所以不能使用add方法,但能add(null),但这个没意义。
可以使用get方法,因为get方法获取的就是一个T类型,建议get方法用T去接。
网友评论