API
Array
Arrays概述
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。 除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException。
常用方法
获取集合
Arrays.asList() 方法返回的是一个固定大小的数组 , 也就是说不可以进行add 和 remove 操作.否则会产生如下错误
Exceptioninthread “main” java.lang.UnsupportedOperationException
At
java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.wsj.utils.ArraysTest.main(ArraysTest.java:19)
示例代码
// 方法原型
public static <T> List<T> asList(T... a)
使用
List
数组排序
对指定的char型数组按数字升序进行排序。该排序算法是一个经过调优的快速排序法
示例代码
// 对数组内所有元素进行排序.
public static void sort(char[] a);
// 对指定范围内的数据进行排序. 包括fromIndex 不包括 toIndex
public static void sort(char[] a,int fromIndex,int toIndex);
// 其他的类型的...
使用
// 1. 排序所有元素,结果 : [1, 2, 3, 6, 7, 8, 9, 10]
byte[] testArray = {2,1,9,8,3,7,6,10};
Arrays.sort(testArray);
System.out.println(Arrays.toString(testArray));
// 2. 排序 [2-5), 结果 : [2, 1, 3, 8, 9, 7, 6, 10]
byte[] testArray = {2,1,9,8,3,7,6,10};
Arrays.sort(testArray,2,5);
System.out.println(Arrays.toString(testArray));
二分查找
使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。必须在进行此调用之前对数组进行排序(通过 sort(byte[]方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。
示例代码
// 在所有元素中查找
public static int binarySearch(byte[] a,byte key);
// 在 [fromIndex , toIndex) 区间内查找.
public static int binarySearch(byte[] a, int fromIndex,int
toIndex,byte key);
数组比较
如果两个指定的 boolean 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。此外,如果两个数组引用都为 null,则认为它们是相等的。
函数原型
public static boolean equals(boolean[] a,boolean[] a2)
转换字符串
返回指定数组内容的字符串表示形式。字符串表示形式由数组的元素列表组成,括在方括号(”[]”)中。相邻元素用字符 “, “(逗号加空格)分隔。这些元素通过 String.valueOf(double) 转换为字符串。如果 a 为 null,则返回 “null”。
函数原型
// 转换成字符串
public static String toString(double[] a)
示例代码
// 输出结果 : [2, 1, 9, 8, 3, 7, 6, 10]byte[] testArray =
{2,1,9,8,3,7,6,10};
System.out.println(Arrays.toString(testArray));
包装类
基本类型包装类概述
将基本数据类型封装成对象类型的类,就叫包装类。好处在于可以提供更多的操作基本数值的功能。
Java提供了8种基本类型对应的包装类:
byte–>Byte
short–>Short
int–>Integer
long–>Long
char–>Character
boolean–>Boolean
float–>Float
double–>Double
其中需要注意 int 对应的是 Integer,char 对应的 Character,其他 6 个都是基本类型首字母大写即可。
- 将字符串转成基本类型:
parseXXX(String s);其中XXX 表示基本类型,参数为可以转成基本类型的字符串,如果字符串无法转成基本类型,将会发生数字转换的问题 NumberFormatException
System.out.println(Integer.parseInt(“123”) + 2);
//打印结果为 125
将基本数值转成字符串有 3种方式:
- 基本类型直接与””,相连接即可;34+””
- 调用 String的 valueOf 方法;String.valueOf(34) ;
- 调用包装类中的 toString 方法;Integer.toString(34);
基本类型和对象转换
使用int类型与 Integer对象转换进行演示,其他基本类型转换方式相同。
基本数值—->包装对象
Integer i = new Integer(4);//使用构造函数函数
Integer ii = new Integer(“4”);//构造函数中可以传递一个数字字符串包装对象—->基本数值
int num = i.intValue();
JDK5特性:自动装箱拆箱
在需要的情况下,基本类型与包装类型可以通用。有些时候我们必须使用引用数据类型
时,可以传入基本数据类型。
比如:
基本类型可以使用运算符直接进行计算,但是引用类型不可以。而基本类型包装类作为
引用类型的一种却可以计算,原因在于,Java”偷偷地”自动地进行了对象向基本数据类型的
转换。
相对应的,引用数据类型变量的值必须是 new 出来的内存空间地址值,而我们可以将
一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于 Java 又”偷偷地”自动地
进行了基本数据类型向对象的转换。
- 自动拆箱:对象转成基本数值
自动装箱:基本数值转成对象
Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;//等号右边:将 i对象转成基本数值(自动拆箱) i.intValue() + 5; 加法运算完
成后,再次装箱,把基本数值转成对象。自动装箱(byte 常量池)细节的演示 当数值在 byte 范围之内时,进行自动装箱,不会新创建对象空间而是使用医来已有的空间。
示例代码
Integer a = new Integer(3);
Integer b = new Integer(3);
System.out.println(a==b);//false
System.out.println(a.equals(b));//true
System.out.println("---------------------");
Integer x = 127;
Integer y = 127;
//在jdk1.5自动装箱时,如果数值在byte范围之内,不会新创建对象空间而是使用原来已有的空
间。
System.out.println(x==y); //true
System.out.println(x.equals(y)); //true
常用类
Date类概述
类 Date 表示特定的瞬间,精确到毫秒。
Date类使用
构造函数
Date()分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)
Date()分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数//创建日期对象,把当前的毫秒值转成日期对象
Date date = new Date(System.currentTimeMillis());
System.out.println(date);
//打印结果:Fri Dec 08 16:28:26 CST 2017将时间打印成本地格式
String toString()把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。- 获取时间戳
getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
把日期对象转换成对应的时间毫秒值
DateFormat
时间戳
时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。使用数字签名技术产生的数据, 签名的对象包括了原始文件信息、 签名参数、 签名时间等信息。广泛的运用在知识产权保护、 合同签字、 金融帐务、 电子报价投标、 股票交易等方面。DateFormat 类概述
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat类)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。日期格式
要格式化一个当前语言环境下的日期,需要通过下面的方法来完成。DateFormat 是抽象类,我们需要使用其子类 SimpleDateFormat 来创建对象。 SimpleDateFormat 可以将一个 Date 对象转换为一个符合指定格式的字符串,也可以将一个符合指定格式的字符串转为一个 Date 对象。 构造方法 SimpleDateFormatter() 用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat DateFormat类方法 String format(Date date) 将一个Date格式化为日期/时间字符串代码示例
//创建日期格式化对象,在获取格式化对象时可以指定风格
DateFormat df= new SimpleDateFormat("yyyy-MM-dd");//对日期进行格式化
Date date = new
Date(System.currentTimeMillis());//System.currentTimeMillis():获取时
间戳
String str_time = df.format(date);
System.out.println(str_time);//2017-12-08
上边的yyyy-MM-dd为指定格式,指定格式的具体规则我们可参照 SimpleDateFormat类的说明,该规则是在一个字符串中,会将以下字母替换成对应时间组成部分,剩余内容原样 输出:
- 当出现 y时,会将 y替换成年
- 当出现 M时,会将 M替换成月
- 当出现d时,会将 d替换成日
- 当出现 H时,会将 H替换成时
- 当出现 m时,会将 m替换成分
- 当出现 s时,会将 s替换成秒
DateFormat类常用方法
format 方法,用来将Date 对象转换成 String
parse 方法,用来将 String转换成 Date(转换时,该String 要符合指定格式,否则不能转换)。
示例代码
//一:把 Date 对象转换成 String
Date date = new Date(System.currentTimeMillis());//Fri Dec 11
00:00:00 CST 2020
DateFormat df = new SimpleDateFormat("yyyy 年MM 月 dd 日");
String str = df.format(date);
System.out.println(str);//内容为 2020 年 12 月11 日
//二:把 String 转换成 Date 对象
String str = "2018 年12 月08 日";
DateFormat df = new SimpleDateFormat("yyyy 年MM 月 dd 日");
Date date = df.parse( str );
System.out.println(date);//Sat Dec 08 00:00:00 CST 2018Calendar
Calendar 类概述
Calendar是日历类,该类将所有可能用到的时间信息封装为静态成员变量,方便获取。 Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象,如下:
- Calendar 类静态方法
static Calendar
getInstance()
使用默认时区和语言环境获得一个日历
Calendar c = Calendar.getInstance(); //返回当前时间
Calendar类常用方法
public static Calendar getInstance() //获取日期对象
public int get(int field) //获取时间字段值,字段参见帮助文档YEAR 年
- MONTH 月,从 0开始算起,最大 11;0代表1 月,11代表 12月。
- DATE 天
- HOUR 时
- MINUTE分
- SECOND秒
代码示例
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);//获取年份
System.out.println(year);
public void add(int field,int amount) //指定字段增加某值
代码示例
Calendar c = Calendar.getInstance();
//修改当前时间为 3 天后
c.add(Calendar.DATE, 3);
//修改当前时间为 5 小时后
c.add(Calendar.HOUR, 5);
//格式化输出
Date date = new Date(c.getTime().getTime());
DateFormat df = new SimpleDateFormat("yyyy 年MM 月dd 日 hh:ss:mm");
String str = df.format(date);
System.out.println(str);
- public final void set(int field,int value)//设置指定字段的值
代码示例
Calendar c = Calendar.getInstance();
//设置时间为 2019 年4月1 日
c.set(Calendar.YEAR, 2019);
c.set(Calendar.MONTH, 3);
c.set(Calendar.DATE, 1);
//格式化输出
Date date = new Date(c.getTime().getTime());
DateFormat df = new SimpleDateFormat("yyyy 年MM 月dd 日 hh:ss:mm");
String str = df.format(date);
System.out.println(str);
- public final Date getTime() //获取该日历对象转成的日期对象
代码示例
Calendar c = Calendar.getInstance();
Date d = c.getTime();
注意事项
西方星期的开始为周日,中国为周一。
在 Calendar类中,月份的表示是以 0-11代表 1-12月。
BigInteger
BigInteger 可以用来解决数据的溢出问题,可以让超过 Integer范围内的数据进行运算
构造方法
public BigInteger(String val)成员方法
public BigInteger add(BigInteger val) 加
public BigInteger subtract(BigInteger val) 减
public BigInteger multiply(BigInteger val) 乘
public BigInteger divide(BigInteger val) 除
public BigInteger[] divideAndRemainder(BigInteger val)先除后取余,结果分别存在数组中
示例代码
public static void main(String[] args) {
//System.out.println(Integer.MAX_VALUE);
//可以接收最大值
Integer i = new Integer(2147483647);
Integer i2 = new Integer(2147483640);
Integer i3 = i + i2;
System.out.println(i3);//超出范围了
BigInteger bi1 = new BigInteger("110");
BigInteger bi2 = new BigInteger("50");
System.out.println(bi1.add(bi2));//加法
System.out.println(bi1.subtract(bi2));//
System.out.println(bi1.multiply(bi2));
System.out.println(bi1.divide(bi2));//除法,得到的结果是商
BigInteger[] b = bi1.divideAndRemainder(bi2);
//做除法,用数组存放商和余数,第一个存商,第二个存余数
System.out.println(b[0]);
System.out.println(b[1]);
}
BigDecimal
如下代码,运算是否有问题
System.out.println(0.09 + 0.01);
System.out.println(1.0 - 0.32);
System.out.println(1.015 * 100);
System.out.println(1.301 / 100);
由于在运算的时候, float 类型和 double 很容易丢失精度 所以,为了能精确的表示、计算浮点数,Java提供了 BigDecimal
- 构造方法
public BigDecimal(String val)
- 成员方法
public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor)
public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
示例代码
public static void main(String[] args) {
// System.out.println(0.09 + 0.01);//0.10 0.1
// System.out.println(1.0 - 0.32); //0.68
// System.out.println(1.015 * 100);//101.5
// System.out.println(1.301 / 100);//0.01301
BigDecimal bd1 = new BigDecimal("0.09");
BigDecimal bd2 = new BigDecimal("0.01");
System.out.println(bd1.add(bd2));
BigDecimal bd3 = new BigDecimal("1.0");
BigDecimal bd4 = new BigDecimal("0.32");
System.out.println(bd3.subtract(bd4));
BigDecimal bd5 = new BigDecimal("1.015");
BigDecimal bd6 = new BigDecimal("100");
System.out.println(bd5.multiply(bd6));
BigDecimal bd7 = new BigDecimal("1.991");
BigDecimal bd8 = new BigDecimal("100");
System.out.println(bd7.divide(bd8));
// 1.301 100 2
System.out.println(bd7.divide(bd8, 2, BigDecimal.ROUND_HALF_UP));
}