一、泛型
概念
泛型:可以在类或方法中预支地使用未知的类型
好处
- 将运行时期的ClassCastException,转移到了编译时期变成了编译失败。
- 避免了类型强转的麻烦。
泛型类和泛型方法
类
修饰符 class 类名<代表泛型的变量> {}
方法
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){}
泛型接口和泛型方法
接口
修饰符 interface 接口名<代表泛型的变量> { }
泛型通配符
使用<?>来表示位置通配符
受限泛型
泛型的上限:
- 格式: 类型名称 <? extends 类> 对象名称
- 意义: 只能接受该类型及其子类
泛型的下限:
- 格式: 类型名称<? super 类> 对象名称
- 意义: 只能接受该类型及其父类
二、跑得快有序案例(模仿斗地主案例)
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
public class PaodkPro {
public static void main(String[] args) {
//制作跑得快的牌库
String[] colors = {"♦", "♣", "♥", "♠"};
String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
HashMap<Integer, String> poker = new HashMap<>();
ArrayList<Integer> pokerIndex = new ArrayList<>();
int index = 0;
for (String number : numbers) {
for (String color : colors) {
if (index < 43) {
poker.put(index, color + number);
pokerIndex.add(index);
index++;
}
}
}
poker.put(index, "♠A");
pokerIndex.add(index);
index++;
poker.put(index, "♠2");
pokerIndex.add(index);
index++;
//洗牌
Collections.shuffle(pokerIndex);
//发牌
//建立三个玩家的牌集
ArrayList<Integer> player1 = new ArrayList<>();
ArrayList<Integer> player2 = new ArrayList<>();
ArrayList<Integer> player3 = new ArrayList<>();
for (int i = 0; i < pokerIndex.size(); i++) {
Integer in = pokerIndex.get(i);
if (i % 3 == 0) {
player1.add(in);
} else if (i % 3 == 1) {
player2.add(in);
} else {
player3.add(in);
}
}
//排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
//看牌
lookPoker("周润发", poker, player1);
lookPoker("刘德华", poker, player2);
lookPoker("周星驰", poker, player3);
}
public static void lookPoker(String name, HashMap<Integer, String> poker, ArrayList<Integer> list) {
System.out.print(name + ": ");
for (Integer key : list) {
String value = poker.get(key);
System.out.print(value + " ");
}
System.out.println();
}
}