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[] args) throws 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) 某年的3月1日 c.add(Calender.DAY_OF_MANTH,-1)3月1日,往前推一天,就是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);返回的是a的b次方的值
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);
}
}
}
- Collections及System的对象
- System.Collections的线程安全
- System.Collections
- 根据给出的值、判断是否构成三角形及类型using System; using System.Collections.Generic; using System.Linq; using System.T
- System.Collections 的常用集合介绍
- System.Collections、System.Collections.Generic、System.Collections.Specialized
- System.Collections中的内容
- The System.Collections Namespace
- System.Collections.ArrayList
- System.Collections.Specialized namespace
- System.Collections 命名空间
- System.Collections命名空间
- System.Collections命名空间
- System.Collections.ArrayList用法
- System.Collections.ArrayList(一)
- System.Collections.ArrayList(二)
- System.Collections 学习中。。。
- System.Collections命名空间
- Flex之旅:第一部分:flex必备基础知识积累(7)---XML, XMLList, XMLListCollection的区别(三)
- Ubuntu设置环境变量
- Android activity的生命周期
- 数据库分表后,并发环境下,生成全局id生成的几种方式
- Android R.java文件丢失的问题
- Collections及System的对象
- 15-03-13读书笔记
- 获取鼠标的位置
- 应用的升级更新
- xcode Prefix.pch文件
- 【源码剖析】tornado-memcached-sessions —— Tornado session 支持的实现(一)
- 增加序号列 - DataSet
- 【LeetCode】[84] Largest Rectangle in Histogram
- 事件标准化设计