Day10 Collection、泛型类,及其扑克牌案例
1.Collection集合
1.1 集合的概述
集合是java中提供的一种容器,可以来存储多个数据,长度不固定。
1.2 集合框架
-
Collection:单列集合类根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.List 和 java.util.Set 。
-
List 的特点是元素有序、元素可重复。 List 接口的主要实现类有 java.util.ArrayList 和 java.util.LinkedList ,
-
Set 的特点是元素无序,且不可重复。 Set 接口 的主要实现类有 java.util.HashSet 和 java.util.TreeSet 。
-
Vector类实现了可增长的对象数组。像数组一样,它包含可以使用整数索引访问的组件。但是,Vector的大小可以根据需要增大或缩小,以适应在创建Vector之后添加和删除项目。
-
与新的集合实现不同,Vector是同步的。如果不需要线程安全实现,建议使用ArrayList代替Vector。
1.3 Collection 常用功能
-
Collection是所有单列集合的父接口,其子类List(有序可重复)和Set(无序不可重复),也必须要具体的子类来实现。
-
*public boolean add(E e) : 把给定的对象添加到当前集合中 。
-
public void clear():清空集合中所有的元素。
-
public boolean remove(E e): 把给定的对象在当前集合中删除。
-
public boolean contains(E e): 判断当前集合中是否包含给定的对象。 public boolean isEmpty() : 判断当前集合是否为空。
-
public int size(): 返回集合中元素的个数。
-
public Object [] toArray(): 把集合中的元素,存储到数组中
2.Iterator迭代器
2.1.java.util.Iterator是一个遍历集合得接口,故也称为迭代器。
Student类省略2.2 增强for循环
- 增强for循环又称foreach循环,可以对无索引的集合进行元素的增删操作。
3.泛型
3.1能将指定集合的元素类型进行添加
其中包括字符串String,Integer,Double,Long,Boolean,还能自定义泛型类。方法,接口,以及泛型通配符<?>。
3.2使用泛型的好处:
1.将运行时期的ClassCastException,转移到了编译时期变成了编译失败。
2. 避免了类型强转的麻烦。
3.3受限泛型的使用
1.泛型的上限:
格式: 类型名称 <? extends 类 > 对象名称
意义: 只能接收该类型及其子类
2.泛型的下限:
格式: 类型名称 <? super 类 > 对象名称
意义: 只能接收该类型及其父类型
(short boolean int double float byte char string)-->Number-->Object
java学习之扑克牌案例
package pocker;
import java.util.ArrayList;
import java.util.Collections;
/**
* 需求: 三个玩家 玩斗地主 每个人拿17 最后剩下3张牌
* 分析:
* 创建一个集合存放2,3,4,5,6,7,8,9,10
* 创建一个集合存放字母:J,Q,K,A
* 再创建一个集合存放花色 ♦ ,♣,♠,♥。
* 创建好牌以后进行洗牌使用Collections的工具类中的一个方法来打乱牌的顺序
* 然后需要创建三个玩家
* 每个玩家都会存放自己的牌,因此需要定义玩家集合
* 然后在定义当索引小于51时需要将牌分别存放在三个玩家手上。
* 大于等于51也就是三张底牌直接存放在底牌的集合中
*/
public class Poker_demo {
public static void main(String[] args) {
//创建牌
//创建牌盒的集合
ArrayList<String> pokers=new ArrayList<>();
//存放数字及其J Q K A
ArrayList<String> list = new ArrayList<>();
for (int i = 2; i <=10; i++) {
//将Integer类型直接转换成String添加到集合中
list.add(i+"");
}
list.add("J");
list.add("Q");
list.add("K");
list.add("A");
//存放花色
ArrayList<String> color = new ArrayList<>();
color.add("♦");
color.add("♣");
color.add("♠");
color.add("♥");
// 拿出每一个花色 然后跟每一个数字 进行结合 存储到牌盒中
for (String str:color) {
for (String st:list) {
String sts=str+st;
pokers.add(sts);
}
}
pokers.add("大王🃏");
pokers.add("小王🃏");
//遍历一下这个集合
for (int i = 0; i <pokers.size(); i++) {
System.out.println(pokers.get(i));
}
// 洗牌
xiPai(pokers);
//发牌
FaPai(pokers);
}
private static void FaPai(ArrayList pokers) {
ArrayList<String> wanJia1 = new ArrayList<>();
ArrayList<String> wanJia2 = new ArrayList<>();
ArrayList<String> wanJia3 = new ArrayList<>();
ArrayList<String> diPai = new ArrayList<>();
//一共有54张牌,每个人17张之后需要剩下3张作为底牌,51张牌是每个人必须的牌
for (int i = 0; i <pokers.size(); i++) {
String po = String.valueOf(pokers.get(i));
if (i>=51) {
diPai.add(po); }
else {
if (i % 3 == 0) {
wanJia1.add(po);
} else if (i % 3 == 1) {
wanJia2.add(po);
} else if (i % 3 == 2) {
wanJia3.add(po);
}
}
}
System.out.println("玩家一的牌:"+wanJia1);
System.out.println("玩家二的牌:"+wanJia2);
System.out.println("玩家三的牌:"+wanJia3);
System.out.println("底牌:"+diPai);
}
private static void xiPai(ArrayList pokers) {
Collections.shuffle(pokers);
}
}
思考:
1.那怎么去将底牌发给地主呢,又如何去确定地主?
2.三个玩家手中的牌又如何来再次排序呢?
网友评论