0x00 泛型

1.概述

泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型。

泛型也可以看出是一个变量,用来接收数据类型

E e:Element 元素

T t:Type 类型

例如:ArrayList集合在定义的时候,不知道集合中都会存储什么类型的数据,所以类型使用泛型。

E:未知的数据类型

创建集合对象的时候,就会确定泛型的数据类型

2.使用泛型的好处

package day23;

import java.util.ArrayList;

import java.util.Iterator;

public class Demo01 {

public static void main(String[] args) {

}

/*

创建集合对象,不使用泛型

好处:集合不使用泛型,默认的类型就是Object类型,可以存储任意类型的数据。

弊端:不安全,会引发异常。

*/

private static void show1(){

ArrayList list = new ArrayList();

list.add("adb");

list.add(1);

//使用迭代器遍历list集合

Iterator it = list.iterator();

while (it.hasNext()) {

Object obj = it.next();

System.out.println(obj);

//想要使用String类特有的方法,length获取字符串长度,需要向下转型。

//而在这时,会抛出类型转换一场,不能把Integer类型转换成String类型。

String s = (String)obj;

System.out.println(s.length());

}

}

/*

创建集合对象,使用泛型

好处:

1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型。

2.把运行期异常(代码运行之后会抛出的异常),提升到了编译器(写代码的时候会报错)。

弊端:

泛型是什么类型,只能存储什么类型的数据。

*/

private static void show2(){

ArrayList list = new ArrayList<>();

list.add("abc");

//使用迭代器遍历list集合

Iterator it = list.iterator();

while(it.hasNext()){

}

}

3.泛型的定义和使用

定义含有泛型的方法:泛型定义在方法和修饰符和返回值类型之间

格式:

修饰符 返回值类型 方法名(参数列表(使用泛型)){

方法体;

含有泛型的方法,在调用方法的时候确定泛型的数据类型。传递什么类型的参数,泛型就是什么类型。

4.含有泛型的接口的定义和使用

含有泛型的接口第一种使用方式:定义接口的实现类,视线接口,指定接口的泛型。

public interface Iterator{

E next();

}

Scanner类视线了Iterator接口,并指定接口的泛型为String,所以重写的next方法泛型默认就是String

public final class Scanner implements Iterator{

public String next() { }

}

含有泛型的接口第二种使用方式:接口使用什么泛型,实现类就使用什么泛型,类跟着接口走。

public interface list{

boolean add(E e);

E get(int index);

}

public class ArrayListimplements List{

public boolean add(E e) {}

public E get(int index) {}

}

5.泛型通配符

泛型的通配符:

?:代表任意的数据类型

使用方式:

不能创建对象使用

只能作为方法的参数使用

使用环境

定义一个方法,能遍历所有类型的ArrayList集合。

这时候我们不知道ArrayList集合使用什么数据类型,可以泛型的通配符?来接受数据类型。

注意:泛型没有继承概念

0x01 斗地主案例

斗地主综合案例要求:

以斗地主的规则,完成洗牌和发牌的动作。

案例完成思路

准备牌:54张牌,存储到一个集合中。

特殊牌:大王,小王

其他52张牌:

定义一个数组/集合,存储四种花色:黑桃、红桃、梅花、方块。

定义一个数组/集合,存储13个序号A,2,3...K。

循环嵌套遍历两个数组/集合,组装52张牌。

洗牌

使用集合工具类Collection的方法

static void shuffle(List>list)使用指定的随即元对指定列表进行置换。

会随机的打乱集合中元素的顺序。

发牌

要求:1人17张牌,剩余3张作为底牌,一人一张轮流发牌:集合的索引(0-53)%3

定义4个集合,存储3个玩家的牌和底牌

索引%2,有两个值(0,1)0%2=0 1%2=1 2 2%2=0 3%2=1。

索引%3,有三个值(0,1,2)0%3=0 1%3=1 2%3=2 3%3=0。

索引>=51,该底牌发牌。

看牌

直接打印集合,遍历存储玩家和底牌的集合。

代码实现

package day23;

/*

斗地主综合案例:

1. 准备牌

2. 洗牌

3. 发牌

4. 看牌

*/

import javafx.print.Collation;

import javax.lang.model.element.NestingKind;

import java.util.ArrayList;

import java.util.Collections;

public class doudizhu01 {

public static void main(String[] args) {

// 1.准备牌

//定义一个存储54张牌的ArrayList集合,泛型使用String

ArrayList poker = new ArrayList<>();

// 定义一个数组,一个数组存储牌的花色,一个数组存储牌的序号。

String[] colors = {"♠","♥","♣","♦"};

String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

//先把大王和小王存储到poker集合中

poker.add("大王");

poker.add("小王");

//循环嵌套遍历两个数组,组装52张牌

for (String number:numbers){

for (String color : colors){

// System.out.println(color+number);

poker.add(color+number);

}

}

// 2.洗牌

//使用集合的工具类Collections种的方法

//static void shuffle(list> list)使用默认随机源对指定列表进行置换。

Collections.shuffle(poker);

// 3.发牌

//定义四个集合,存储玩家的牌和底牌。

ArrayList player1 = new ArrayList<>();

ArrayList player2 = new ArrayList<>();

ArrayList player3 = new ArrayList<>();

ArrayList dipai = new ArrayList<>();

/*

遍历poker集合,获取每一张牌

使用poker集合的索引%3给3个玩家轮流发牌

剩余3张牌给底牌

注意:

首先判断底牌是不是大于51张,否则就没有底牌了、

*/

for (int i = 0; i < poker.size(); i++) {

//获取每一张牌

String p = poker.get(i);

//设置发牌循环

if (i>=51){

dipai.add(p);

} else if (i%3 == 1){

player1.add(p);

} else if (i%3 == 2){

player2.add(p);

} else {

player3.add(p);

}

}

// 4.看牌

System.out.println("玩家1的牌:"+player1);

System.out.println("玩家2的牌:"+player2);

System.out.println("玩家3的牌:"+player3);

System.out.println("底牌:"+dipai);

}

}

java -1%3_java学习笔记(day23)相关推荐

  1. java/android 设计模式学习笔记(1)--- 单例模式

    前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...

  2. java.util.List学习笔记

    概述 在Java中,List是一种特殊的集合结构,即:List是一种有序的集合.在List接口的实现中,需要提供根据列表下表对元素进行操作的方法,包括:插入,删除,查询和修改等: List一般允许重复 ...

  3. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  4. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  5. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  6. Java快速入门学习笔记6 | Java语言中的for循环语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  7. Java快速入门学习笔记5 | Java语言中的while循环语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  8. Java快速入门学习笔记4 | Java语言中的if条件语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. Java快速入门学习笔记3 | Java语言中的表达式与操作符

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

最新文章

  1. JavaEE程序员必读图书大推荐 .
  2. NS2中802.11代码深入理解—packet传输的流程 (转帖)
  3. Mybatis-Plus升级完成! 我的系统到底更新了什么?Mybatis-Plus比Mybatis好在了哪里?
  4. 设计模式学习(六):重构与模式,推荐书籍(完)
  5. java mvc模式_Java MVC模式
  6. vscode下的好用插件收集
  7. Unix网络编程卷一第三章笔记
  8. php7 aop,php之aop实践
  9. PHP搭建留言板,PHP搭建简易留言板
  10. nginx请求转发被拒绝_nginx实现请求转发
  11. 黑色炫酷网址安全跳转GO跳转PHP源码
  12. 解决导出excel文件名中文乱码的问题
  13. CSS 样式,如何计算临近颜色值?
  14. win10更新至1909版本后,Primo Ramdisk失效的解决方案
  15. 零基础入门推荐系统 - 新闻推荐实战-笔记四
  16. 阅读类APP会员页竞品分析
  17. 基于行为模拟爆破C/S架构客户端程序的一些猜想实现
  18. SQL语句报错:1062, “Duplicate entry ‘XXX‘ for key ‘XXX‘
  19. win10无法安装完成若要在此计算机上,windows10无法完成安装怎么解决_win10提示windows无法完成安装的解决教程...
  20. JavaWeb和WebGIS学习笔记(三)——GeoServer 发布shp数据地图

热门文章

  1. java int在那个包_int intValue()
  2. 卡诺模型案例分析_质量管理神器,Kano模型您可知道?
  3. Python+OpenCV:Hough直线检测(Hough Line Transform)
  4. 集成产品开发(IPD)初探
  5. Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)...
  6. 2018 年力扣高频算法面试题汇总-难题记录-鸡蛋掉落
  7. 赋能时空云计算,阿里云数据库时空引擎Ganos上线
  8. Linux常用命令——xargs
  9. TypeScript学习笔记(第一天)------创建简单的web应用
  10. js 基础总结(常用的反转)