Java总结系列之与运行环境交互及常用工具类

本文详细介绍了Java集合框架中的工具类Collections和Arrays的功能与用法,包括如何将集合加锁变为线程安全、数组与集合的相互转换及高级for循环等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合框架中的工具类:

其一collections

一些collection可能用到的一些方法定义到工具类中,需要使用的时候,直接调用方法就可以了

但要注意工具类中的方法都是静态的。

 

这种思想很关键,当我们开发的时候也可以将一些方法定义在一个工具类中

需要时只需要调用就行了。

 

有空翻翻java.util中的工具类collections 与Arrays 两个类


public class Collectionsextends Object

此类完全由在 collection 上进行操作或返回 collection 的静态方法

组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器

返回由指定 collection 支持的新 collection,以及少数其他内容。

例如

replaceAll(List<T> list, T oldVal, T newVal) 
          使用另一个值替换列表中出现的所有某一指定值。

reverseOrder() 
          返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序

addAll(Collection<? super T> c, T... elements) 
          将所有指定元素添加到指定 collection 中

 

collections中有一类很重要的方法,可以直接将指定的集合加锁,

将其变成同步的支持同步的集合。

例如:

static <T> List<T>

 synchronizedList(List<T> list)

          返回指定列表支持的同步(线程安全的)列表


其二Allays

Arrays:集合框架的工具类。里面的方法都是静态的。

重点方法List asList(数组)将数组转成集合。

 * 好处:其实可以使用集合的方法操作数组中的元素。

 * 注意:数组的长度是固定的,所以对于集合的增删方法是不可以使用的

 * 否则会发生UnsupportedOperationException

例如:判断数组中是否有某一元素。


重点方法:集合转成数组

方法:

 使用的就是Collection接口中的toArray方法。

String[] arr = list.toArray(new String[list.size()]);

好处

 集合转成数组:可以对集合中的元素操作的方法进行限定。不允许对其进行增删。

特点

toArray方法需要传入一个指定类型的数组。长度该如何定义呢?

如果长度小于集合的size,那么该方法会创建一个同类型并和集合相同size的数组。如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合中的元素,其他位置默认为null所以建议,最后长度就指定为,集合的size


String[] arr = list.toArray(new String[list.size()]);

java.lang 接口 Iterable<T>

高级for可以在对集合元素进行取出操作时可以替代迭代器Iterator

例如

Iterator<String> it = list.iterator();

while(it.hasNext())

System.out.println(it.next());

而现在

for(String s : list){ //最大好处:简化书写。

System.out.println(s);


 传统for和高级for的区别?

传统for可以完成对语句执行很多次,因为可以定义控制循环的增量和条件。

* 例如:我想打印对象string“hello world”一百遍,就无法用高级for

* 高级for是一种简化形式。

* 它必须有被遍历的目标。该目标要是数组,要么是Collection单列集合。

*高级for用处:

* 对数数组的遍历如果仅仅是获取数组中的元素,可以使用高级for

* 如果要对数组的角标进行操作建议使用传统for

for(String s : list){ //简化书写。
System.out.println(s);
}


一些新的方法书写及其特性:

函数的可变参数。:int...

 * 其实就是一个数组,但是接收的是数组的元素。

 * 自动将这些元素封装成数组。简化了调用者的书写。

 *

 * 注意:可变参数类型,必须定义在参数列表的结尾。

public static int newAdd(int a,int...  arr){

int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum+=arr[i];
}
return sum;

// System.out.println(arr);
// return 0;
}


API中其他的一些类(存在于java.lang)的用法:

System:

System:类中的方法和属性都是静态的。

 * 常见方法:

 * long currentTimeMillis();获取当前时间的毫秒值。

TimeMillis:毫秒值。

//获取系统的属性信息,并存储到了Properties集合中。 
/*
* properties集合中存储都是String类型的键和值。
* 最好使用它自己的存储和取出的方法来完成元素的操作。
*/
Properties prop = System.getProperties();

Set<String> nameSet = prop.stringPropertyNames();

for(String name : nameSet){
String value = prop.getProperty(name);

System.out.println(name+"::"+value);
}

Runtime

Runtime:没有构造方法摘要,说明该类不可以创建对象。

 * 又发现还有非静态的方法。说明该类应该提供静态的返回该类对象的方法。

 * 而且只有一个,说明Runtime类使用了单例设计模式。

例如

Runtime r = Runtime.getRuntime();

//execute: 执行。 xxx.exe   exe是应用程序的后缀名。

//        可以利用Java程序打开指定程序

Process p = r.exec("notepad.exe");打开notepad程序。

但是注意必须要书写程序所在的绝对地址值,例如:

r.exec("c:\\abc\\QQ.exe")打开cabc目录下的QQ.exe程序

使用双斜线是因为:\是转意符,前一个转意符可以将后一个转意符转回其本意。

进而得到c:\abc\QQ.exe

r.exec("c:\\abc\\baofeng.exe d:\\aa\\video\\大圣归来.mp4")

就可以用暴风影音来打开大圣归来的电影文件。

Thread.sleep(5000);//睡觉5

p.destroy();

//destroy()杀掉子进程


Math

Math:提供了操作数学运算的方法都是静态的。

常用的方法:

 * ceil():返回大于参数的最小整数。

 * floor():返回小于参数的最大整数。

 * round():返回四舍五入的整数。

 * pow(a,b):ab次方。

因为静态的方法,所以可以直接用类名.方法来调用这个方法。


DateDateFormat

日期对象和毫秒值之间的转换。

 * 毫秒值-->日期对象

日期对象-->毫秒值:

 * 2getTime方法。

 * 因为可以通过具体的数值进行运算。

对日期对象进行格式化。

 * 将日期对象-->日期格式的字符串。

 * 使用的是DateFormat类中的format方法

将日期格式的字符串-->日期对象。

 * 使用的是DateFormat类中的parse()方法。

练习:

"2012-3-17""2012-4-6"中间有多少天?

思路:

1. 两个日期相减就哦了咋减呢?必须要有两个可以进行减法运算的数。

能减可以是毫秒值。如何获取毫秒值?通过date对象。

如何获取date对象呢?可以将字符串转成date对象。

实现步骤:

1,将日期格式的字符串转成Date对象。

2,Date对象转成毫秒值。

2, 相减,在变成天数


DateFormat dateFormat = DateFormat.getDateInstance();
dateFormat = new SimpleDateFormat("yyyy-MM-dd");

Date date1 = dateFormat.parse(str_date1);
Date date2 = dateFormat.parse(str_date2);

long time1 = date1.getTime();
long time2 = date2.getTime();

long time = Math.abs(time1-time2);


int day = getDay(time);
System.out.println(day);


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值