【Java基础篇】Java 工具类

1. Collections

  • 工具类,提供了对集合的常用操作
  • 对集合进行查找
  • 取出集合中的最大值,最小值
  • 对List集合进行排序
  1. 集合框架的工具类。
    Collections:集合框架的工具类。里面定义的都是静态方法。

  2. Collections和Collection有什么区别?

Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。它有两个常用的子接口

  • List:对元素都有定义索引。有序的。可以重复元素。
  • Set:不可以重复元素。无序。

    Collections是集合框架中的一个工具类。该类中的方法都是静态的
  • 提供的方法中有可以对list集合进行排序,二分查找等方法。
  • 通常常用的集合都是线程不安全的。因为要提高效率。
  • 如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
  1. 指定类型的数组到底要定义多长呢?
  • 当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。
  • 当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组。
  • 所以创建一个刚刚好的数组最优。
  1. 为什么要将集合变数组?
  • 为了限定对元素的操作。不需要进行增删了

2. Arrays

  • 工具类,提供了对数组的常用操作
  • 将数组转成List集合
  • 对数组进行排序
  • 对数组进行二分查找
  • 将数组转为字符串显示形式

Arrays:用于操作数组的工具类。里面都是静态方法。asList:将数组变成list集合

2.1 把数组变成list集合有什么好处?

可以使用集合的思想和方法来操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删方法。因为数组的长度是固定。只能使用查询的方法

  • contains。
  • get
  • indexOf()
  • subList();

注意:
如果你增删。那么会反生UnsupportedOperationException,
如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

3. System类

  • 静态属性in为标准输入流,属于InputStream类型,read方法返回一个字节
  • 静态属性out为标准打印流,属于PrintStream类型,print方法打印字符
  • 可以用set方法修改属性in和out
  • System.exit()方法退出Java虚拟机
  • System.gc()垃圾回收
  • System.getProperties()方法获得系统属性
    因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。那么可以通过map的方法取出该集合中的元素。该集合中存储都是字符串。没有泛型定义。

4. Runtime类

  • 表示系统运行时状态
  • exec方法执行命令

4.1 Runtime对象

该类并没有提供构造函数。说明不可以new对象。那么会直接想到该类中的方法都是静态的。发现该类中还有非静态方法。说明该类肯定会提供了方法获取本类对象。而且该方法是静态的,并返回值类型是本类类型。由这个特点可以看出该类使用了单例设计模式完成。该方式是static Runtime getRuntime();

5. Date时间类

  • 使用new Date()创建时间对象代表当前系统时间
  • 需要使用SimpleDateFormat类来进行格式化,才能显示想符合习惯的格式
public class Demo02 {
    public static void main(String[] args) throws ParseException {
        //把时间对象按照 "格式字符串指定的格式"  转成相应的字符串
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd  hh:mm:ss");  //按指定格式进行转换
        String format = df.format(new Date());  //将时间转换为字符串
        System.out.println(format);

        //把字符串对象按照 "格式字符串指定的格式"  转成相应的时间
        DateFormat sf1 = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss");

        Date parse = sf1.parse("2019-7-6 12-13-12");

        System.out.println(parse);
    }
}

Calendar类

  • 使用该类对时间进行操作比较方便
  • 通过常量来表示时间的各种值,如一年中的某一天,一个月的某一天等
  • 将对应的常量作为形参来调用相应的get、add、set方法来操作对象

jodatime工具类

<!--日期时间工具-->
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10.1</version>
</dependency>

创建日期

JDK的日期是Date:

Date date = new Date();

Joda-Time的日期是DateTime:

DateTime dateTime = new DateTime();

DateTime在创建的时候还可以轻松的指定特定的日期和时间:

DateTime dateTime2 = new DateTime(2016, 10, 01, 8, 00, 00);

日期格式化

JDK使用的是SimpleDateFormat来进行日期的格式化:

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(date);

乍看之下用起来也不麻烦,但是SimpleDateFormat是非线程安全的。也就是说,如果在并发环境下,必须对SimpleDateFormat对象做同步处理,比如用synchronized,比如用ThreadLocal;或者每次都new一个新的SimpleDateFormat对象,缺点显而易见,就是浪费资源。

而Joda-Time中的DateTime本身就有格式化的方法,对象直接调用即可:

DateTime dateTime = new DateTime();
String dateTimeStr = dateTime.toString("yyyy-MM-dd HH:mm:ss");

当然,如果要用转换器,Joda-Time也提供了DateTimeFormatter:

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
String dateTimeStr2 = dtf.print(dateTime);

而且DateTimeFormatter是不可变的,所以是线程安全的
SimpleDateFormat和DateTimeFormatter都可以将字符串转换成日期:

String dateStr = "2016-10-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
   Date date = sdf.parse(dateStr);
} catch (ParseException e) {
   e.printStackTrace();
}

日期计算

个人在Joda-Time使用中,最喜欢的是它的日期计算。

比如要得到40天前的日期,在JDK中,计算日期相当复杂,必须借助日历Calendar来完成:

Date today = new Date();

Calendar calendar = Calendar.getInstance();

calendar.setTime(today);

calendar.add(Calendar.DAY_OF_MONTH, -40);

Date beforeDay = calendar.getTime();

System.out.println(beforeDay);

Joda-Time中,日期自带日期计算功能,非常直观:

DateTime todayDateTime = new DateTime();

DateTime beforeDateTime = todayDateTime.minusDays(40);

System.out.println(beforeDateTime);

如果要计算两个日期相差的天数,使用JDK是这样实现的:

int diffDays = (int)(today.getTime() - beforeDay.getTime())/(24 * 60 * 60 * 1000);

Joda-Time提供了相关的方法来处理:

int diffDays2 = Days.daysBetween(beforeDateTime, todayDateTime).getDays();

除了天数,月数、年数计算起来都非常方便,比如月数:

int diffMonths = Months.monthsBetween(beforeDateTime2, todayDateTime).getMonths();

兼容JDK日期
Joda-Time另一个使用起来非常方便的地方就是与JDK日期类的互相转换。因为很多现成的接口可能是用JDk的日期作为入参或者出参,如果Joda-Time不能兼容,那很多方便就不复存在了。

//Date to DateTime

Date date = new Date();

DateTime dateTime = new DateTime(date);

//DateTime to Date
Date date2 = dateTime.toDate();

//Calendar to DateTime
Calendar calendar = Calendar.getInstance();
DateTime dateTime2 = new DateTime(calendar);

//DateTime to Calendar
Calendar calendar2 = dateTime2.toCalendar(Locale.CHINA);

Math—Random类

static double ceil(double d) 返回大于d的最小整数 注意 d = 12.3时,结果:13 
d = -12.3 结果:-12
static double floor(double a) 返回小于a的最大整数,
static long round(double a) 返回a的四舍五入的整数

Math.random()Random.NextInt(int n)的使用;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java语言程序设计(基础) PDF》是一本介绍Java语言基础知识和编程技巧的电子书。这本书主要分为七个部分,从基本的概念开始逐步讲解Java语言的各个方面。 第一部分介绍了Java的发展历史和编程环境的安装,以及Java程序的基本结构和执行过程。读者可以了解到Java语言的特点和运行原理。 第二部分介绍了Java的数据类型和变量,包括基本数据类型、引用数据类型和常量的使用方法。此外,还详细介绍了Java的运算符和表达式的使用。 第三部分是关于流程控制的内容,包括条件语句、循环语句和选择结构。通过学习这一部分,读者可以了解Java中的条件判断和循环执行的方法。 第四部分介绍了数组和方法的使用,包括数组的声明和初始化、数组的遍历和排序,以及方法的定义和调用。这些是Java程序设计中常用的基本工具。 第五部分是关于面向对象编程的内容,包括类的概念、对象的创建和使用,以及封装、继承和多态等面向对象的基本概念和技巧。 第六部分介绍了异常处理和文件操作的方法。Java提供了强大的异常处理机制,可以帮助程序员处理潜在的错误情况。同时,Java也提供了丰富的文件操作功能,可以方便地进行文件的读写操作。 最后一部分介绍了Java的图形用户界面和事件处理。这些内容可以帮助读者了解如何使用Java创建图形化界面,并且可以对用户的操作做出相应的响应。 总的来说,《Java语言程序设计(基础) PDF》是一本系统全面、内容详细的Java语言教材,适用于初学者和有一定编程基础的读者。通过阅读这本书,读者可以全面掌握Java语言的基本知识和编程技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李熠漾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值