Data Calendar类 拆/装箱 基类与字符串转换 Iterator 增强for Lambda 泛型 斗地主

本文详细介绍了Java calendar类的使用,包括日期解析、常用方法(如get、set、add)、拆箱与装箱、基本类型与字符串转换,以及Collection集合(尤其是迭代器)的应用。通过实例演示了如何操作日期、遍历和修改时间,以及泛型在日期处理中的运用。
摘要由CSDN通过智能技术生成

目录 

calendar类​
拆箱与装箱​

基本类型与字符串转换 ​
Collection集合:​

Iterator迭代器(集合专用的遍历方式)​
迭代器底层源码
增强for循环

Lambda表达式遍历
forEach() 

泛型:
泛型类
泛型方法
泛型接口

泛型通配符 ​
斗地主综合案例


package a09text;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Data {
    public static void main(String[] args) throws ParseException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的生日,格式为:yyyy-MM-dd");
        String birthdayDataString = sc.next();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birthdayData = sdf.parse(birthdayDataString);

        long birthdayDataTime = ((Date) birthdayData).getTime();
        long todayTime = new Date().getTime();
        
        long time = todayTime - birthdayDataTime;
        System.out.println(time / 100 / 60 / 60 / 24);
    }
}

 
calendar类

3.2 常用方法

方法名说明
public static Calendar getInstance()获取一个它的子类GregorianCalendar对象。
public int get(int field)获取某个字段的值。field参数表示获取哪个字段的值, 可以使用Calender中定义的常量来表示: Calendar.YEAR : 年 Calendar.MONTH :月 Calendar.DAY_OF_MONTH:月中的日期 Calendar.HOUR:小时 Calendar.MINUTE:分钟 Calendar.SECOND:秒 Calendar.DAY_OF_WEEK:星期
public void set(int field,int value)设置某个字段的值
public void add(int field,int amount)为某个字段增加/减少指定的值

3.3 get方法示例

public class Demo {
    public static void main(String[] args) {
        //1.获取一个GregorianCalendar对象
        Calendar instance = Calendar.getInstance();//获取子类对象

        //2.打印子类对象
        System.out.println(instance);

        //3.获取属性
        int year = instance.get(Calendar.YEAR);
        int month = instance.get(Calendar.MONTH) + 1;//Calendar的月份值是0-11
        int day = instance.get(Calendar.DAY_OF_MONTH);

        int hour = instance.get(Calendar.HOUR);
        int minute = instance.get(Calendar.MINUTE);
        int second = instance.get(Calendar.SECOND);

        int week = instance.get(Calendar.DAY_OF_WEEK);//返回值范围:1--7,分别表示:"星期日","星期一","星期二",...,"星期六"

        System.out.println(year + "年" + month + "月" + day + "日" + 
                           	hour + ":" + minute + ":" + second);
        System.out.println(getWeek(week));

    }

    //查表法,查询星期几
    public static String getWeek(int w) {//w = 1 --- 7
        //做一个表(数组)
        String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        //            索引      [0]      [1]       [2]      [3]       [4]      [5]      [6]
        //查表
        return weekArray[w - 1];
    }
}

3.4 set方法示例:

public class Demo {
    public static void main(String[] args) {
        //设置属性——set(int field,int value):
		Calendar c1 = Calendar.getInstance();//获取当前日期

		//计算班长出生那天是星期几(假如班长出生日期为:1998年3月18日)
		c1.set(Calendar.YEAR, 1998);
		c1.set(Calendar.MONTH, 3 - 1);//转换为Calendar内部的月份值
		c1.set(Calendar.DAY_OF_MONTH, 18);

		int w = c1.get(Calendar.DAY_OF_WEEK);
		System.out.println("班长出生那天是:" + getWeek(w));

        
    }
    //查表法,查询星期几
    public static String getWeek(int w) {//w = 1 --- 7
        //做一个表(数组)
        String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        //            索引      [0]      [1]       [2]      [3]       [4]      [5]      [6]
        //查表
        return weekArray[w - 1];
    }
}

3.5 add方法示例:

public class Demo {
    public static void main(String[] args) {
        //计算200天以后是哪年哪月哪日,星期几?
		Calendar c2 = Calendar.getInstance();//获取当前日期
        c2.add(Calendar.DAY_OF_MONTH, 200);//日期加200

        int y = c2.get(Calendar.YEAR);
        int m = c2.get(Calendar.MONTH) + 1;//转换为实际的月份
        int d = c2.get(Calendar.DAY_OF_MONTH);

        int wk = c2.get(Calendar.DAY_OF_WEEK);
        System.out.println("200天后是:" + y + "年" + m + "月" + d + "日" + getWeek(wk));

    }
    //查表法,查询星期几
    public static String getWeek(int w) {//w = 1 --- 7
        //做一个表(数组)
        String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        //            索引      [0]      [1]       [2]      [3]       [4]      [5]      [6]
        //查表
        return weekArray[w - 1];
    }
}

不同的月可能有不同的天数, 有的是30天, 有的是31天, 对于二月的天数判断还得先判断是平年还是闰年, 所以如果自己写代码判断会比较麻烦, 其实java.util.Calendar中已经提供了获取天数的方法, 代码如下: 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
public class DateUtil {
 
	public static int getDaysOfMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}
 
	public static void main(String[] args) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println(getDaysOfMonth(sdf.parse("2015-02-2")));
	}
}


拆箱与装箱

基本类型与字符串转换 Collection集合:

Iterator迭代器(集合专用的遍历方式)

it.remove();从迭代器指向的collection中移除迭代器返回的最后一个元素

 //.获取迭代器对象
        //迭代器就好比是一个箭头,默认指向集合的0索引处
        Iterator<String> it = coll.iterator();
        //3.利用循环不断的去获取集合中的每一个元素
        while(it.hasNext()){
            //4.next方法的两件事情:获取元素并移动指针
            String str = it.next();
            System.out.println(str);
        }
        //当上面循环结束之后,迭代器的指针已经指向了最后没有元素的位置
        //System.out.println(it.next());//NoSuchElementException
        //迭代器遍历完毕,指针不会复位
        System.out.println(it.hasNext());

        //如果我们要继续第二次遍历集合,只能再次获取一个新的迭代器对象
        Iterator<String> it2 = coll.iterator();
        while(it2.hasNext()){
            String str = it2.next();
            System.out.println(str);
        }

迭代器底层源码

增强for循环

 快速生成方式:集合名字+for+回车

函数式编程思想:

面向对象思想:  
做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情
函数式编程思想
只要能获取到结果,谁做,怎么做都不重要,重要的是结果,不重视过程

  

Lambda表达式遍历 forEach()
 

泛型:

泛型只支持引用数据类型;为什么泛型中不能写基本数据类型:
在集合运行,数据存入集合的时候,会转换成Object类型,取出的时候再装箱;
而基本类型无法转成Object


泛型类

E element元素 ;T type 类型 ; K key ; V value.

泛型方法

泛型接口

{泛型不具备继承性,但是数据具备继承性
        //创建集合的对象
        ArrayList<Ye> list1 = new ArrayList<>();
        ArrayList<Fu> list2 = new ArrayList<>();
        ArrayList<Zi> list3 = new ArrayList<>();

        //调用method方法
        //method(list1);
        //method(list2);  //泛型不能继承
        //method(list3);
        list1.add(new Ye());
        list1.add(new Fu());
        list1.add(new Zi());
    }
    public static void method(ArrayList<Ye> list) {
    }
}

class Ye { }
class Fu extends Ye { }
class Zi extends Fu { }

泛型通配符
 

地主综合案例

import java.util.ArrayList;
import java.util.Collections;

public class dizhu {
    public static void main(String[] args) {
        //1.准备牌  定义一个存储54张牌的ArrayList集合,泛型使用String
        ArrayList<String> poker = new ArrayList<>();
        //定义两个数组,一个数组存储花色 一个存储牌序号
        String[] colors = {"♠", "♥", "♣", "♦"};
        String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
        //把大小王存储到poker中
        poker.add("大王");
        poker.add("小王");
        //循环嵌套遍历两个数组,组装52张牌
        for (String number : numbers) {
            for (String color : colors) {
                //System.out.println(color + number);
                //把组装好了的牌存储到poker集合中
                poker.add(color + number);
            }
        }
        //2.洗牌
        //使用集合的工具类Collections中的方法
        //static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换
        Collections.shuffle(poker);

        //3.发牌
        //定义三个集合存储 玩家的牌,一个集合存储三张底牌
        ArrayList<String> player01 = new ArrayList<>();
        ArrayList<String> player02 = new ArrayList<>();
        ArrayList<String> player03 = new ArrayList<>();
        ArrayList<String> diPai = new ArrayList<>();

        //使用poker集合的索引%3 给3个玩家轮流发牌
        //注意: 先判断底牌(i>=51) 否则三张底牌发没了
        for (int i = 0; i < poker.size(); i++) {
            String p = poker.get(i);      //获取每一张牌
            if (i >= 51) diPai.add(p); //最后三张给底牌
            else if (i % 3 == 0) player01.add(p);
            else if (i % 3 == 1) player02.add(p);
            else if (i % 3 == 2) player03.add(p);
        }

        //4.看牌
        System.out.println("刘德华的牌:" + player01);
        System.out.println("周润发的牌:" + player02);
        System.out.println("周星驰的牌:" + player03);
        System.out.println("底牌:" + diPai);
    }
}

泛型案例

{       ArrayList<PersianCat> list1 = new ArrayList<>();
        ArrayList<LiHuaCat> list2 = new ArrayList<>();
        ArrayList<TeddyDog> list3 = new ArrayList<>();
        ArrayList<HuskyDog> list4 = new ArrayList<>();

        keepPet(list1);
        keepPet(list2);
        keepPet(list3);
        keepPet(list4);
    }

    //该方法能养所有的动物,但是不能传递其他类型
    public static void keepPet(ArrayList<? extends Animal> list){
        //遍历集合,调用动物的eat方法
    }

  //  要求2:该方法能养所有品种的狗,但是不能养猫
    public static void keepPet(ArrayList<? extends Dog> list){
        //遍历集合,调用动物的eat方法
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软工菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值