Collections及System的对象

来源:互联网 发布:网络扫描工具 编辑:程序博客网 时间:2024/05/28 15:22

Collections

1、collections作为工具类,它里面的方法都是静态的,它没有对外提供构造函数,不需要创建对象,因为它的对象当中并未封装特有数据,都是共享型数据,方法定义成静态最方便。

 Collections是专门对集合进行操作的工具类。

静态方法:

对list集合进行元素的自然排序

Collections.sort(list)

按指定的比较器方法排序

   Collections.sort(list,指定的比较器对象)

返回list中字典顺序最大的元素

Collections.max(list);

二分查找,返回角标,必须是有序的

int index=Collections.binarySearch(list,"z");

将list集合中的所有元素替换成指定元素

Collections.fill("指定的元素");

将list集合中某个元素替换成指定元素

Collections.repalceAll(list,"要被替换的元素","新的元素");

Collection和Collections的区别:

Collections是一个java.util下的类,是针对集合类的一个工具类,提供一系列静态方法,实现对集合的查找、排序、替换、线程安全化(将非同步的集合转换成同步的)等操作。

Collection是一个java.util下的接口,它是各种集合结构的父接口,继承于它的接口主要有Set和List,提供了关于集合的一些操作,如插入、删除、判断、遍历等

Arrays:用于操作数组的工具类。里面都是静态方法。

  asList:将数组变成list集合。

好处:可以使用集合的思想和方法来操作数组中的元素。如果增删了会发生不支持操作异常。

注意:将数组变成集合,不可以使用集合的增删方法,因为数组的长度是固定的。

    可以用其他的方法如:contains get indexof subList

如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素,如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素

public class ArraysDemo {

public static void main(String[] args) {  

String[] str={"abcd","abc","ab"};

Integer[] it={1,2,3,4};//定义Integer类型的数组,此时会将数组中的基本类型数据进行自动装箱,成为Integer类型对象

int[] it1={1,2,3};

List<String > li=Arrays.asList(str);

System.out.println(li);

List<Integer> l=Arrays.asList(it);

System.out.println(l);

List<int[]> l1=Arrays.asList(it1);

System.out.println(l1);

}

}

 

 集合变数组:Collection接口中toArray方法。

 指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组,长度为集合的size,当指定类型的数组的长度大于了集合的size,就不会新创建数组,而是使用传递进来的数组。所以创建一个刚刚好的数组最优。

为什么将集合变数组:为了限定对元素的操作。不需要对集合中的元素进行增删。

Jdk1.5版本新特性

高级for循环:底层原理是迭代器,升级是为了简化书写。

格式:for(数据类型 变量名:被遍历的集合(Collection)或者数组)

局限性:只能对集合中的元素进行取出,不能对集合中的元素做修改动作。

迭代器:除了遍历,还可以进行remove集合中元素的动作。

如果使用ListIterator还可以在遍历过程中对集合中元素进行增删改查的动作。

public class CollectiontoArrayDemo{

public static void main(String args[]){

ArrayList<String> al=new ArrayList<String>();

al.add("abc1");

al.add("abc2");

al.add("abc3");

for(String a:al){

//改变了a的指向,但是集合中的元素并没有变

a="aa";

System.out.println(a);

}

}

}


 传统for循环和高级for循环的区别:

高级for循环有一个局限性,必须有被遍历的目标。建议在遍历数组的时候,还是希望使用传统for循环,因为传统for循环可以定义角标


可变参数:其实就是上一种数组参数的简写形式。不用每一次都手动的建立数组对象。只要将要操作的元素作为参数传递即可。隐式将这些参数封装成了数组。

格式:函数名(数据类型...(可变参数) 数组名);

简化了开发代码,提高了开发速度。

使用注意:可变参数一定要定义在参数列表的最后。

如:show(int a,string s,string... str){}

静态导入StaticImport

格式:import static java.包名.类名.*;导入的某个类中的所有静态成员。

当类名重名时,需要指定具体的包名。当方法重名时,指定具体所属的对象或者类。

System的其他对象

1、system:包含一些有用的类字段和方法。它不能被实例化(对外没有提供构造函数),方法和属性都是静态的。

Out:标准输出,默认是控制台

In:标准输入,默认是键盘。

描述系统一些信息Properties 是hashtable的子类,也就是map集合的一个子类对象。那么可以通过map的方法取出该集合中的元素。

获取系统属性信息:Properties getProperties();

public class SystemDemo {

public static void main(String[] args) {//获取系统的所有属性信息

Properties prop=System.getProperties();

//获取指定键的属性信息

String value1=System.getProperty("os.name");

System.out.println(value1);

for(Object obj:prop.keySet()){

String value=(String) prop.get(obj);

System.out.println(obj+"::"+value);

}

}

}

设置系统属性信息:setProperty(“ ”,” ”);

public class SystemDemo {

public static void main(String[] args) {//设置属性信息

System.setProperty("myComputer","yangruijing");

}

}

在虚拟机jvm启动时,动态加载一些属性信息:(java -D=值) 运行类名

Runtime

每个java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime方法获取当前运行时对象。应用程序不能创建自己的Runtime类实例。

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

该方法是static Runtime getRuntime();

public class SystemDemo {

public static void main(String[] argsthrows Exception{

//获取Runtime对象

Runtime rt=Runtime.getRuntime();

//在单独的进程中执行指定的字符串命令,如:执行系统中的扫雷游戏

Process p=rt.exec("C:\\Program Files\\Microsoft Games\\Minesweeper\\Minesweeper.exe");

Thread.sleep(5000);

p.destroy();//结束子进程 

}

}

Date

Date表示特定的瞬间,精确到毫秒。

用法:

public class DateDemo {

public static void main(String[] args) {

//创建Date对象

Date d=new Date();

//将模式封装到SimpleDateFormat对象中

SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");

//调用format方法,对指定日期进行格式化

String date=sdf.format(d);

System.out.println(date);

}}

Calendar

常用方法:

//获取Calendar对象

Calendar c=Calendar.getInstance();

//设置时间

c.set(2014, 2,15);

//将时间向前推或者向后移

c.add(Calendar.DAY_OF_MONTH,-20 );

//月份列表

String[] month={"一月","二月","三月","四月",

"五月","六月","七月","八月",

"九月","十月","十一月","十二月"};

//星期列表

String[] weeks={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

//获取并打印年份

System.out.println(c.get(Calendar.YEAR)+"年");

//获取月份

int index=c.get(Calendar.MONTH);

System.out.println(month[index]);

//获取并打印月份中的某天

System.out.println(c.get(Calendar.DAY_OF_MONTH)+"日");

//获取星期中的某天

int index1=c.get(Calendar.DAY_OF_WEEK);

System.out.println(weeks[index1]);

练习:1、获取任意年的二月有多少天

  思路:根据指定年设置一个时间就是c.set(year,2,1) 某年的31日 c.add(Calender.DAY_OF_MANTH,-1)31日,往前推一天,就是2月的最后一天。

算法如下:

//定义函数用于获取任意一年的二月份有多少天

public static void getFebruaryDay(Calendar c,int year){

c.set(year, 2,1);

c.add(Calendar.DAY_OF_MONTH,-1);

int dayNum=c.get(Calendar.DAY_OF_MONTH);

System.out.println(year+"年的2月有"+dayNum);

}

 2、获取昨天的现在这个时候

     C.add(Calender.DAY_OF_MANTH,-1)

算法如下:


//定义函数用于获取昨天的这个时刻

public static void getTime(Calendar c){

c.add(Calendar.DAY_OF_MONTH,-1);

int date=c.get(Calendar.HOUR_OF_DAY);

int minute=c.get(Calendar.MINUTE);

System.out.println(date+":"+minute);

}

Math:包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数等。

方法:

返回大于指定数据的最小整数

double ceil(double d);

double ceil=Math.ceil(4.234);

返回小于指定数据的最大整数

double floor(double d);

double f=Math.floor(12.34);

四舍五入方法

long round(double d);

double ru=Math.round(12.56);

指数幂方法

double pow(double a,double b);返回的是ab次方的值

double d=Math.pow(2,4);

 

随机数方法

random();返回大于等于0.0且小于1.0的伪随机double

public class MathDemo {

public static void main(String[] args) {

for(int i=0;i<10;i++){

int d1=(int)(Math.random()*10+1);

System.out.println(d1);

}

//创建random随机数对象

Random r=new Random();

for(int i=0;i<10;i++){

// 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。

int rd=r.nextInt(10)+1;

System.out.println(rd);

}

}

}

0 0
原创粉丝点击