Java入门到精通——第二十单元 集合②

第二十单元 集合②

  • 测试题
  • 今日重点学习目标
  • 迭代器-Iterator
    • 1.1 概述
    • 1.2 方法
    • 1.3 代码演示
    • 1.4 迭代器原理
  • 增强for-遍历集合
  • 泛型
    • 1.1 泛型的高级使用
  • 斗地主案例

测试题

1、判断键盘录入的字符串是否对称,并在控制台打印输出结果。【考核知识点:StringBuilder类的方法】

/**
 * Create by yanhongbo
 * 日期 2021/4/25
 *1、(必做录屏)判断键盘录入的字符串是否对称,并在控制台打印输出结果。【考核知识点:StringBuilder类的方法】
 *  例如 "abccba"
 * @Version 1.0
 */
public class Test03 {
    public static void main(String[] args) {
        //第一步键盘录入
        System.out.println("请输入字符串 例如abccba");
        String str = new Scanner(System.in).nextLine();
        //第二步:创建Stringbuilder对象
        StringBuilder sb=new StringBuilder(str);
        //第三步:字符串反转
        StringBuilder str2 = sb.reverse();
        //把可变的字符串变成不可变的 调用toString();
        String str3 = str2.toString();
      /*  if(str.equals(str3)){
            System.out.println("字符串对称");
        }else{
            System.out.println("字符串不对称");
        }*/
        String s=(str.equals(str3))?"对称":"不对称";//利用三元运算符
        System.out.println(s);

    }
}

2、 计算小票信息上的总价。【考核知识点:字符串的解析和引用类型转换】

小票信息已给出 :

String message= "大拉皮-21.90;鱼香肉丝-22.80;巫山烤鱼-58.80”;

public class Test04 {
    public static void main(String[] args) {
        String message= "大拉皮-21.90;鱼香肉丝-22.80;巫山烤鱼-58.80";
        //第一步:把字符串中的数字提取出来  split();
        String[] arr = message.split("[-;]");
        //遍历字符串数字
       /* for (String s : arr) {
            System.out.println(s);
        }*/
        double sum=0;
        for(int i=1;i<arr.length;i+=2){
            //第二步:把字符串转换为double类型 parseDouble(String s)
            sum+=Double.parseDouble(arr[i]);
        }
        System.out.println(sum);//103.5
    }
}

今日重点学习目标

  1. 迭代器–Iterator–对集合进行遍历
  2. 增强For–变量名.iter
  3. 泛型
  4. 斗地主-案例

迭代器-Iterator

1.1 概述

对 collection 进行迭代的迭代器,也就是Collection下面的所有实现类都可以使用Iterator进行遍历。

1.2 方法

public boolean hasNext(); 如果仍有元素可以迭代,则返回 true。 判断集合中是否有元素,如果有继续遍历。

public E next():返回迭代的下一个元素。 获取集合中元素

public void remove():从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。 基本上很少用

1.3 代码演示

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * Create by yanhongbo
 * 日期 2021/4/25
 * 演示迭代器Iterator中两个方法
 * public boolean hasNext();
 * public  E next():
 * @Version 1.0
 */
public class DemoIterator01 {
    public static void main(String[] args) {
        //第一步:创建集合
        Collection<String> col=new ArrayList<>();//多态形式
        //第二步:集合中添加元素
        col.add("aaa");
        col.add("bbb");
        col.add("ccc");
        col.add("ddd");
        //第三步:使用迭代器Iterator进行对集合遍历
        //备注:如果想使用Iterator必须得到Iterator对象之后 就可以使用hasNext();next():
        Iterator<String> it = col.iterator();
        //使用hasNext();next():
        /*boolean b = it.hasNext();
        System.out.println(b);
        String next = it.next();
*/
        /* if(it.hasNext()){
             String next = it.next();
             System.out.println(next);
         }
        if(it.hasNext()){
            String next = it.next();
            System.out.println(next);
        }
        if(it.hasNext()){
            String next = it.next();
            System.out.println(next);
        }if(it.hasNext()){
            String next = it.next();
            System.out.println(next);
        }*/
        while(it.hasNext()){
            String str = it.next();
            System.out.println(str);
        }
    }
}

1.4 迭代器原理

1、集合中的remove()方法与迭代器中的remove()的使用

迭代器中的remove()在获取元素之后才能使用该方法

集合的remove()在遍历之前或者遍历中都可以使用该方法

2、在迭代器遍历中使用集合中的remove()方法

不行的。会导致并发修改异常

增强for-遍历集合

格式 -jdk5的新特性

for(元素的数据类型 变量名:集合or数组变量名){
    //循环体
}
快捷键 变量名.iter 然后enter

代码演示

public class Test {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        //增强for遍历
        for (String s : list) {
            System.out.println(s);
        }
    }
}

JDK5的新特性
装箱和拆箱、增强for、枚举、反射

泛型

public class Test01 {
    public static void main(String[] args) {
        ArrayList col=new ArrayList();
        col.add(1);
        col.add("a");
        col.add('b');
        //遍历
        for(int i=0;i<col.size();i++){
            //获取
            String o =(String) col.get(i);
            System.out.println(o);
        }
    }
}

运行结果

为了解决类型转换异常—泛型

类的后面定义泛型

格式:<数据类型>

例如 ArrayList<String> list=new ArrayList<>();

笔试题:泛型的好处
1、把运行期的异常提前到编译期。
2、防止类型转换异常

接口 类 方法 都可以定义泛型

public static <User> void add(){

}

1.1 泛型的高级使用

通配符高级使用----受限泛型

之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。但是在JAVA的泛型中可以指定一个泛型的上限下限

泛型的上限

  • 格式类型名称 对象名称
  • 意义只能接收该类型及其子类

泛型的下限

  • 格式类型名称 对象名称
  • 意义只能接收该类型及其父类型

代码演示

public class Test03 {
    public static void main(String[] args) {
       Collection<Number> col=new ArrayList<>();
       col.add(1);
       Collection<Object> col1=new ArrayList<>();
       getElement1(col);
     //   getElement1(col1);//报错 只能接受该类及其子类
        getElement2(col);
        getElement2(col1);//只能接受该类型及其父类
    }
    //泛型的上限
    private static void getElement1(Collection<? extends Number> col){

    }
    //泛型的下限
    private static void getElement2(Collection<? super Number> col){

    }
}

斗地主案例

打扑克-54张牌

public class DoudiZhu {
    public static void main(String[] args) {
        //创建54张扑克牌的集合
        ArrayList<String> pokerbox=new ArrayList<>();
        //创建花色的集合
        ArrayList<String> colors=new ArrayList<>();
        //创建数字的集合
        ArrayList<String> numbers=new ArrayList<>();
        //往花色集合中添加元素
        colors.add("♠");
        colors.add("♥");
        colors.add("♦");
        colors.add("♣");
        //往数字集合中添加元素
       for(int i=2;i<=10;i++){
           numbers.add(i+"");
       }
       numbers.add("A");
       numbers.add("J");
       numbers.add("Q");
       numbers.add("K");
       //进行拼接
        for (String color : colors) {
            for (String number : numbers) {
                pokerbox.add(color+number);
            }
        }
       //大小王
        pokerbox.add("大王");
        pokerbox.add("小王");
        //进行洗牌
        Collections.shuffle(pokerbox);
        //进行发牌-- 对3个玩家进行发牌 留3张底牌
        ArrayList<String> play1=new ArrayList<>();//17张牌
        ArrayList<String> play2=new ArrayList<>();//17张牌
        ArrayList<String> play3=new ArrayList<>();//17张牌  n/3 0 1 2
        ArrayList<String> dipai=new ArrayList<>();//3张

        for(int i=0;i<pokerbox.size();i++){
            //获取扑克牌
            String card = pokerbox.get(i);
            if(i>=51){
                dipai.add(card);
            }else if(i%3==0){
                play1.add(card);
            }else if(i%3==1){
                play2.add(card);
            }else{
                play3.add(card);
            }
        }
        System.out.println("玩家1"+play1);
        System.out.println("玩家2"+play2);
        System.out.println("玩家3"+play3);
        System.out.println("底牌"+dipai);
    }
}

你可能感兴趣的:(java)