Java学习2-日期类和Collection集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习2-日期类和Collection集合相关的知识,希望对你有一定的参考价值。

Java学习2-日期类和Collection集合

一、日期类

1.date类

1.1 构造方法

date类用来获取时间,将毫秒值转化为时间。常用构造方法有如下:

  • public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。

  • public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。

    无参构造可以获得当前的系统时间,有参构造根据你传入的毫秒值来获得相应的时间。

1.2 常用方法

  • public long getTime() 把日期对象转换成对应的时间毫秒值。

    import java.util.Date;

    public class Demo01Date {
       public static void main(String[] args) {
           Date date1 = new Date();
           Date date2 = new Date(1);
           
           System.out.println(date1);//Fri Aug 03 10:53:06 CST 2018
           System.out.println(date2);//Thu Jan 01 08:00:00 CST 1970

           System.out.println(date1.getTime());//1533264786720
       }
    }


2.DateFormat类

DateFormat类是一个抽象类,它有一个子类SimpleDateFormat,用来把Date类型的日期和字符串类型的日期按照指定格式进行相互转换。

2.1 构造方法

public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。

常用的日期格式符号

字母(区分大小写)含义
y
M
d
H
m
s

2.2 常用方法

  • public String format(Date date):将Date对象格式化为字符串。

  • public Date parse(String source):将字符串解析为Date对象。


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

public class Demo02DateFormat {
   public static void main(String[] args) throws ParseException {
       DateFormat dtf = new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");
       String str = dtf.format(new Date());
       System.out.println(str);//2018年08月03日  11时20分12秒

       System.out.println(dtf.parse(str));//Fri Aug 03 11:20:12 CST 2018
   }
}

[注意:在使用parse方法时,需要进行异常抛出。]    DateFormat dtf = new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");使用了多态,也可将DateFormat改为SimpleDateFormat.


3.Calendar类

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象。可以用来获取年月日,星期几等。

3.1 获取对象方法

  • public static Calendar getInstance():使用默认时区和语言环境获得一个日历

3.2 常用方法

  • public int get(int field):返回给定日历字段的值。

  • public void set(int field, int value):将给定的日历字段设置为给定值。

  • public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。

  • public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。

    字段值含义:

技术分享图片技术分享图片


/*
求出给定日期是星期几
*/

import java.util.Calendar;

public class Demo01 {
   public static void main(String[] args) {
       Calendar cal = Calendar.getInstance();

       //西方国家月份0-11,一星期从周日开始
       cal.set(Calendar.YEAR, 2018);
       cal.set(Calendar.MONTH, 7);   //代表中国的8月份
       cal.set(Calendar.DATE, 1);

       int year = cal.get(Calendar.YEAR);
       int month = cal.get(Calendar.MONTH) + 1;
       int date = cal.get(Calendar.DATE);
       int week = cal.get(Calendar.DAY_OF_WEEK);   //week为4,代表中国的星期3
       System.out.println(year+"年"+month+"月"+date+"日是星期"+getWeek(week));
   }

   //获取数字周几对应的汉字
   public static char getWeek(int week) {
       char[] chs = {' ', '日', '一', '二', '三', '四', '五', '六'};
       return chs[week];
   }
}


二、Collection集合

集合按照其存储结构可以分为两大类,分别是单列集合Collection和双列集合Map。Collection是单列集合类的跟接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是List、Set。List的特点是元素有序、元素可重复。Set的特点是元素无序,而且不可重复。接口的主要实现类如下:

技术分享图片技术分享图片

1.Collection常用方法


  • 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(): 把集合中的元素,存储到数组中。


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

public class Demo02Collection {
   public static void main(String[] args) {
       Collection<String> coll = new ArrayList<>();
       coll.add("曹操");
       coll.add("刘备");
       coll.add("孙权");
       boolean flag1 = coll.add("司马懿");//返回布尔值

       for (String s : coll) {
           System.out.print(s + "  ");
       }
       System.out.println();

       boolean flag2 = coll.remove("司马懿");//删除指定对象,返回布尔值
       for (String s : coll) {
           System.out.print(s + "  ");
       }
       System.out.println();

       boolean flag3 = coll.contains("孙权");//判断集合是否包含该对象

       Object[] objects = coll.toArray();//将集合转化为Object[]数组
       System.out.println("转化为数组后遍历:");
       for (Object o : objects) {
           System.out.print(o + "  ");
       }
       System.out.println();

       coll.clear();//清空集合
       boolean flag4 = coll.isEmpty();//判断集合是否为空
       System.out.println(flag4);
   }
}

[Collection<String> coll = new ArrayList<>();]    用Collection子接口的List的实现类ArrayList来创建对象,体现多态性

2.Iterator迭代器

2.1 常用方法

Iterator迭代器主要用来遍历集合,遍历之前先获取该集合的迭代器。iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。

  • public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的。

  • public E next():返回迭代的下一个元素。

  • public boolean hasNext():如果仍有元素可以迭代,则返回 true。


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

public class Demo01 {
   public static void main(String[] args) {
       Collection<String> c = new ArrayList<>();
       c.add("曹操");
       c.add("刘备");
       c.add("孙权");

       Iterator<String> it = c.iterator();//创建集合对象的迭代器
       while (it.hasNext()) {  //判断下一个元素是否为空
           System.out.println(it.next());  //不为空输出元素
       }
   }
}


3.增强for循环

增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

格式如下:


for(元素的数据类型  变量 : Collection集合or数组){
  //写操作代码
}

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

/*
增强for循环,只能遍历,不能改动数值,底层用的也是迭代器
*/
public class Demo02Foreach {
   public static void main(String[] args) {
       Collection<String> c = new ArrayList<>();
       c.add("曹操");
       c.add("刘备");
       c.add("孙权");

       for (String s:c) {
           System.out.println(s);
       }

   }
}


4.泛型

泛型:当创建集合对象时,在<>中填写的引用数据类型,用来限制数据的类型,不添加泛型时,集合中既能存储字符串,也能存储数字等。在迭代遍历时,要进行数据类型强制转换,可能出现ClassCastException错误,使用泛型能够避免这种错误。

1.定义含有泛型的类

格式:


修饰符 class 类名<代表泛型的变量> {  }

创建类时,加入泛型,创建对象时,确定具体的数据类型。

public class Person<E> {
   private E name;

   public Person(E name) {
       this.name = name;
   }

   public void show(E smallName) {
       System.out.println("名字为:" + name + ",小名为:" + smallName);
   }
}




public class Demo01 {
   public static void main(String[] args) {
       Person<String> p = new Person<>("张三");
       p.show("狗娃");   //名字为:张三,小名为:狗娃

   }
}

2.定义含有泛型的方法

格式:


修饰符 <代表泛型的变量> 返回值类型 方法名(参数){  }

创建方法时,加入泛型,根据调用方法时传的参数类型,确定具体的数据类型。

public class Person{
   private String name;

   public Person(String name) {
       this.name = name;
   }

   public <E> void show(E smallName) {
       System.out.println("名字为:" + name + ",小名为:" + smallName);
   }
}


public class Demo01 {
   public static void main(String[] args) {
       Person p = new Person("张三");
       p.show("狗娃");   //名字为:张三,小名为:狗娃
   }
}





以上是关于Java学习2-日期类和Collection集合的主要内容,如果未能解决你的问题,请参考以下文章

集合框架学习笔记

Java集合框架中接口Collection和Map的区别

Java学习笔记5.1.2 集合 - Collectiont接口

java中集合类中Collection接口中的List接口的常用方法熟悉

Java集合类总结

Java集合框架--学习目标 & 集合概念 & Collection体系集合 & Collection接口