Arrays类
以下内容来自JDK1.6.0!
Arrays类包为java.util.Arrays 继承自 java.long.Object。Arrays类中的方法都是静态方法。
此类包含用来处理数组的各种方法(包括二分查找法、复制指定数组、判断两个数组是否相等、快速排序、返回字符串形式、基于指定数组的内容返回哈希码、将指定的 boolean 值分配给指定 boolean 型数组的每个元素)。此类还包含一个允许将数组作为列表来查看的静态工厂。
此类是
Java Collections Framework 的成员。
二分查找法
方法摘要:static int |
binarySearch(byte[] a, byte key) 使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。 |
static int |
binarySearch(byte[] a, int fromIndex, int toIndex, byte key) 使用二分搜索法来搜索指定的 byte 型数组的范围,以获得指定的值。 |
关于二分查找:
Arrays类中的二分查找法只有这两种格式,但是查找的数组不仅仅是byte[]型,还有char[],double[],float[],int[],long[],short[],Object[],以及泛型T。
toString方法
toString方法继承自 long包下的 Object类。
方法摘要:
static String |
toString(int[] a) 返回指定数组内容的字符串表示形式。 |
关于toString:
此方法的形式参数还可以是:boolean[],float[],double[],char[],byte[],Object[],long[],short[],返回是一个String字符串。
sort快速排序方法
方法摘要:
static void |
sort(byte[] a) 对指定的 byte 型数组按数字升序进行排序。 |
static void |
sort(byte[] a, int fromIndex, int toIndex) 对指定 byte 型数组的指定范围按数字升序进行排序。 |
Arrays类中的快速排序方法只有这两种格式,适用于7种常用类型+泛型+Object类型做形式参数。
equals方法适用于7种+Object类型数组的相等判断,因为源码重写了toString方法,所以比较的是数组元素。方法摘要:
static boolean |
equals(int[] a, int[] a2) 如果两个指定的 int 型数组彼此相等,则返回 true。 |
fill方法是用来将数组中所有元素或者指定范围元素来用一个值替换,这个值可以是7种+Object类型,替换值必须和数组类型一致。方法摘要:
static void |
fill(boolean[] a, boolean val) 将指定的 boolean 值分配给指定 boolean 型数组的每个元素。 |
static void |
fill(boolean[] a, int fromIndex, int toIndex, boolean val) 将指定的 boolean 值分配给指定 boolean 型数组指定范围中的每个元素。 |
hashcode方法摘要:
static int |
hashCode(boolean[] a) 基于指定数组的内容返回哈希码。 |
例子:
import java.util.Arrays; public class Test { public static void main(String[] args) { int[] arr = {21,32,14,56,32,10}; //toString 方法 String str = Arrays.toString(arr); System.out.println("String:"+str); //二分查找法 int index = Arrays.binarySearch(arr, 32); System.out.println("index:"+index); //sort快速排序 Arrays.sort(arr);//快速排序返回值为void,结果不能被接收!! printArray(arr); //fill替换方法 Arrays.fill(arr, 32);//将全部元素用32替代 printArray(arr); //hashcode方法 int hash = Arrays.hashCode(arr); System.out.println("hashcode: "+hash); //equals方法 int arr2[] = {21,32,14,56,32,10}; System.out.println(Arrays.equals(arr, arr2));//因为sort和fill方法都是直接改变了arr[]的值,所以不相等了 int arr3[] = {32, 32, 32, 32, 32, 32}; System.out.println(Arrays.equals(arr, arr3)); } //遍历 public static void printArray(int[] arr) { System.out.print("result:["); for(int x = 0 ;x <arr.length ; x++) { if(x == arr.length-1) { System.out.println(arr[x] + "]"); }else { System.out.print(arr[x]+", "); } } } }
Calendar类
Calendar类是一个抽象类(public abstract class Calendar extends Object),它为特定瞬间与一组诸如
YEAR
、
MONTH
、
DAY_OF_MONTH
、
HOUR
等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
static Calendar getInstance() 使用默认时区和语言环境获得一个日历。 static Calendar getInstance(Locale aLocale) 使用默认时区和指定语言环境获得一个日历。 static Calendar getInstance(TimeZone zone) 使用指定时区和默认语言环境获得一个日历。 static Calendar getInstance(TimeZone zone, Locale aLocale) 使用指定时区和语言环境获得一个日历。
Calendar类的构造方法都是被protected修饰的,所以只能对子类进行实例化。因为Calendar是一个抽象类,所以不能实例化。那么如何实例化呢?Calendar类中提供了一个静态方法:getInstance(),此方法返回的是一个Calendar对象。
int |
get(int field) 返回给定日历字段的值。 |
要使用字段得到当前日期的话必须得使用get方法得到字段的值。
import java.util.Calendar; public class Test2 { public static void main(String[] args) { //set up Calendar Object Calendar calendar = Calendar.getInstance(); //get year,month,day int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DATE); System.out.println(year+"-"+(month+1)+"-"+day); //Calendar change:add method calendar.add(Calendar.YEAR, 2); year = calendar.get(Calendar.YEAR); calendar.add(Calendar.DATE,2); day = calendar.get(Calendar.DATE); System.out.println(year+"-"+(month+1)+"-"+day); } }
Calendar中的两个常用方法:
public abstract void add(int field,int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量 (这个方法常用) public final void set(int year, int month,int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
import java.util.Calendar; public class Test3 { public static void main(String[] args) { Calendar c = Calendar.getInstance(); c.set(2018, 8, 8); //因为set方法返回值为void,故只能分别获取年月日 int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int date = c.get(Calendar.DATE); System.out.println(year+"-"+month+"-"+date); } }例子:
import java.util.Calendar; import java.util.Scanner; /** * 需求:获取任意一年的二月有多少天 (改进:键盘录入一个年份) */ public class Test4 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("输入年份:"); int year = sc.nextInt(); Calendar c = Calendar.getInstance(); c.set(year, 2, 1);//实际是2月1日 c.add(Calendar.DATE, -1); System.out.println("2月有 " + c.get(Calendar.DATE)+ "天"); } }
注意:
1、java中通过类调用字段得到的并不是字段的值,需要得到字段值的话只能通过get()这个静态方法。
2、java中关于月份计算,一月对应的是0,所以需要得到实际的月分的话需要给字段MONTH值+1 。
System类
System类是一个抽象类,这个类中有一些有用的
类字段和方法,不能被实例化。
在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。
字段摘要 | |
---|---|
static PrintStream |
err “标准”错误输出流。 |
static InputStream |
in “标准”输入流。 |
static PrintStream |
out “标准”输出流。 |
可以知道in这个字段在我们键盘录入的时候经常会用到,out字段在我们打印的时候也会经常用到。
常用方法:
public static void gc() | 运行垃圾回收器 |
---|---|
public static void exit(int status) | 终止当前正在运行的 Java 虚拟机。参数用作状态码; 一般情况,需要终止 Jvm,那么参数0 |
public static long currentTimeMillis() | 返回以毫秒为单位的当前时间 |
public static void arraycopy(Object src,int srcPos, Object dest,int destPos, int length) | 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束 src:原数组 dest:目标数组 srcPos :从原数组的哪个位置开始 destPos:到目标数组的哪个位置结束 length:长度 |
例子:(
currentTimeMillis()和
gc())
public class Test1 {public static void main(String[] args) {//返回以毫秒为单位的当前时间,返回值为long型long ct = System.currentTimeMillis();System.out.println("time: "+ct +" ms");//这样用的意义不大
public class Test1 {public static void main(String[] args) {//返回以毫秒为单位的当前时间,返回值为long型long ct = System.currentTimeMillis();System.out.println("time: "+ct +" ms");//这样用的意义不大 //可以用来计算运行一段代码的耗时,只需将代码放在两个时刻中间,然后计算两个时刻之间的时间即可求出。//gc()方法:用来回收不用的对象//先创建一个对象Person p = new Person("aloha", 22);System.out.println("回收前: "+p);//回收前: Person [name=aloha, age=22],因为p这个对象并不是无用对象。System.out.println("---------------------");//将p1空掉(不指定堆内存)Person p1 = new Person("alohaq", 221);p1 = null ;System.gc();System.out.println(p1);System.out.println(p);}}//这里写一个实体类:person 符合javabean规范的类就叫做实体类,类中变量、方法与sql存在对应关系。class Person{private String name ;private int age ;public Person() {super();}public Person(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}@Overrideprotected void finalize() throws Throwable {//重写垃圾回收器看看时候时候调用了这个方法System.out.println("不用这个对象了"+ this);super.finalize();}//有成员,有构造方法,有setget方法,有重写toString方法}
//可以用来计算运行一段代码的耗时,只需将代码放在两个时刻中间,然后计算两个时刻之间的时间即可求出。//gc()方法:用来回收不用的对象//先创建一个对象Person p = new Person("aloha", 22);System.out.println("回收前: "+p);//回收前: Person [name=aloha, age=22],因为p这个对象并不是无用对象。System.out.println("---------------------");//将p1空掉(不指定堆内存)Person p1 = new Person("alohaq", 221);p1 = null ;System.gc();System.out.println(p1);System.out.println(p);}}//这里写一个实体类:person 符合javabean规范的类就叫做实体类,类中变量、方法与sql存在对应关系。class Person{private String name ;private int age ;public Person() {super();}public Person(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}@Overrideprotected void finalize() throws Throwable {//重写垃圾回收器看看时候时候调用了这个方法System.out.println("不用这个对象了"+ this);super.finalize();}//有成员,有构造方法,有setget方法,有重写toString方法}
打印结果:
可以看到:System类中的currentTimeMillis()方法得到的值确实是以ms为单位的当前时间与1970年1月1日的差。对于gc()方法,它只会回收无用的对象,比如上例中我们创建了p,p1两个对象,我们把p1对象指向null,即不给它分配堆内存,那么p1对象就是我们垃圾回收器的回收对象。如何观察gc()方法调用了垃圾回收器finalize()方法?我们覆写了finalize()这个方法,在其中打印了一句话,就可以看到什么时候调用了垃圾回收器。
exit(int status):可以结束死循环。status为0表示正常终止,不为0表示异常终止。
该方法调用 Runtime
类中的 exit
方法。该方法永远不会正常返回。 这个方法和finally有关系。
调用 System.exit(n)
实际上等效于调用:
Runtime.getRuntime().exit(n)
public static void arraycopy(Object src,int srcPos, Object dest,int destPos, int length):将src对象的srcPos开始的length长度的组复制覆盖到dest对象的destPos开始的组中。
例子:
import java.util.Arrays; public class Test2 { public static void main(String[] args) { //System类中的数组复制方法 int[] arr1 = {22,31,34,12,41,11}; int[] arr2 = {11,23,42,543,63,22,234}; System.out.println(Arrays.toString(arr1)); System.out.println(Arrays.toString(arr2)); System.arraycopy(arr1, 2, arr2, 2, 2); System.out.println(Arrays.toString(arr1)); System.out.println(Arrays.toString(arr2)); } }结果
Date类
Date类虽然有很多方法已经过时,但是Date类中存在我们可以用来实现时间的格式化和解析的方法。可以实现在String和 Date类型之间进行转换 。另外,我们创建一个Date对象,那么输出这个对象会发现,这个对象是当前时间,精确到毫秒。
d对象的例子:
import java.util.Date; public class Test3 { public static void main(String[] args) { Date d = new Date(); System.out.println(d); } }
DateFormat是日期/时间格式化的抽象类,它以与语言无关的方式格式化并解析日期时间。我们可以用DateFormat类的直接子类SimpleDateFormat这个类来实现Date与String类之间的转换,并且,在SimpleDateFormat这个类中有对日期时间格式的说明。
日期格式化为Date——>String。解析相反。例子:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test3 { public static void main(String[] args) throws ParseException { Date d = new Date(); System.out.println(d); //创建一个Date对象 Date d1 = new Date(); /** * 格式化 */ //创建sdf对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //格式化 String str = sdf.format(d1); System.out.println(str); /** * 解析 */ String strt = "2018-05-03" ; SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); Date d2 = sdf1.parse(strt); System.out.println(d2); } }
练习例子:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; /** *键盘录入你的出生年月日,算一下你来到这个世界多少天? * *分析: * 1)创建键盘录入对象,录入一个数据出生年月日 * 2)1990-xx-xx * 3)将文本格式的数据解析成日期对象 * 4)getTime() ; 获取出生所在日期的时间毫秒值 * 5)获取当前系统时间毫秒值 * (6) 5)-4) = long time * * 6)换算 * * */ public class Test4 { public static void main(String[] args) throws ParseException { Scanner sc = new Scanner(System.in); System.out.println("按这个格式输入生日:yyyyMMdd"); String birth = sc.nextLine(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Date bi = sdf.parse(birth); long t = bi.getTime(); Date d = new Date(); long nt = d.getTime(); long t1 = (nt - t) /1000 /60 /60 /24; System.out.println("你来到这个世界:"+t1+"天"); } }
Math类
常用方法:
public static int abs(int a):绝对值
public static double ceil(double a):向上取整
public static double floor(double a):向下取整
public static int max(int a,int b):求最大值
public static int min(int a,int b):求最小值
public static double pow(double a,double b):a的b次幂
public static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
public static int round(float a):四舍五入
public static double sqrt(double a):一个数的正平方根
public static double ceil(double a):向上取整
public static double floor(double a):向下取整
public static int max(int a,int b):求最大值
public static int min(int a,int b):求最小值
public static double pow(double a,double b):a的b次幂
public static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
public static int round(float a):四舍五入
public static double sqrt(double a):一个数的正平方根
Random类
Random:是一个可以获取随机数的类
public Random():无参构造方法
public Random(long seed) :指定long类型的数据进行构造随机数类对象
public int nextInt():获取随机数,它的范围是在int类型范围之内
public int nextInt(int n):获取随机数,它的范围是在[0,n)之间