常用类
1. Arrays类
static List asList(T…a): 可以放入数组或直接以可变参放入多个类.
static void sort(int[] a): 排序.
static void fill(int[] a, int val): 将指定值填充.
static int binarySearch(int[] a, int key): 对排序后进行二分查找指定值.
static boolean equals(boolean[] a, boolean[] a2): 判断数组是否相等.
基本数据类型(数值型)的包装类有比较大小的方法,如Double类型数值: Double.compareTo(double d1, double d2).
JDK8之前的时间API
注: System.currentTimeMillis() //当前时间与1970-01-01 00:00:00的时间差,即时间戳
1. SimpleDateFormat
格式化 format: Date–>String
解析 parse: String–>Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(sdf.format(new Date()));
System.out.println(sdf.parse("2020-02-02 12:12:12"));
2. Calendar
Calendar calendar =Calendar.getInstance(): 获取当前时间.
calendar.set(2021,8,10,15,0,0): 设置时间,注意第二个参数月份是从0开始的,即0为一月,8就是9月了.
calendar.get(Calendar.DAY_OF_WEEK): 获取星期几,返回结果1表示星期日,2表示星期一,…
calendar.get(Calendar.HOUR_OF_DAY): 获取几点,返回的是24时的,Calendar.HOUR返回的是12时的.
calendar.add(Calendar.DATE, 1): 增加,这是将原先时间中的Day加一.
new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”).format(calendar): 格式化.
JDK8中的时间API
1. LocalDate,LocalTime,LocalDateTime(类似Calendar):
now(): 获取当前日期,时间,日期时间,
of(): 设置指定的年月日时分秒,无偏移量.
getXxx(): 获取指定的类型(年,月…)的值.
withXxx(): 设定指定的类型的值,返回新值(原值不可变性).
plusXxx(): 新增指定的类型的值,返回新值(原值不可变性).
minusXxx(): 减少指定的类型的值,返回新值(原值不可变性).
2. Instant(类似Date):
now(): 获取本初子午线对应的标准时间.
atOffset(ZoneOffset.ofHours(8)): 添加时间的偏移量(东八区写8).
toEpochMilli(): 获取1970-1-1 00:00:00开始的毫秒数,即时间戳.
3. DateTimeFormatter(类似SimpleDateFormat):
格式化 format: LocalDate,LocalTime,LocalDateTime–>String
解析 parse: String–>LocalDate,LocalTime,LocalDateTime
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
System.out.println(dateTimeFormatter.format(LocalDateTime.now()));
System.out.println(dateTimeFormatter.parse("2021-09-25 10:12:10"));
4. 附当月日历(用JDK8中的时间API)
//当月日历
@Test
public void test3(){
LocalDate date = LocalDate.now();
int month = date.getMonthValue();
int today = date.getDayOfMonth();
date = date.minusDays(today - 1); // Set to start of month
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue();
System.out.println("Mon Tue Wed Thu Fri Sat Sun");
for (int i = 1; i < value; i++)
System.out.print(" ");
while (date.getMonthValue()== month) {
System.out.printf("%3d", date.getDayOfMonth());
if (date.getDayOfMonth() == today)
System.out.print("*");
else
System.out.print(" ");
date = date.plusDays(1);
if (date.getDayOfWeek().getValue() == 1) System.out.println();
}
if (date. getDayOfWeek() .getValue() != 1) System.out.println();
}
比较器
Comparable接口(自然排序),String就实现了Comparable接口,重写了compareTo(obj)方法,自定义类也是一样的步骤.
当前this对象大于形参obj,返回正整数(从小到大),小于返回负整数,等于返回零.
public class Goods implements Comparable{
private String name;
private int price;
@Override
public int compareTo(Object o) {
if (o instanceof Goods){
Goods goods = (Goods) o;
return this.price-goods.price;
}
throw new RuntimeException("传入的类型不一致!");
}
}
Comparator接口(定制排序),没有实现Conparable接口,又不方便修改代码或实现的Comparable接口规则不适合当前操作,可以考虑使用Comparator接口.
o1大于o2,返回正整数,小于返回负,等于返回零.(o1,o2表示比较的类).
@Test
public void test(){
String[] arr = {"Za", "DD", "WW", "gg"};
//Comparator接口(定制排序)
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return -o1.compareTo(o2);
}
});
System.out.println(Arrays.toString(arr));
}
一般情况下:
Compare接口的方法一旦一定,保证其实现类在任何位置可以比较.
Comparator接口属于临时性的比较.
Math类
注: 以下部分方法省略了参数类型和返回值类型.
abs(): 绝对值
random(): 返回0.0~1.0的随机数.
acos(),asin(),atan(),cos(),sin(),tan(): 三角函数.
sqrt(): 平方根.
long round(double a): double转long的四舍五入.
pow(double a ,double b): a的b次幂.
log: 自然对数.
exp: e为底的指数.
toDegrees(double angrad): 弧度->角度.
toRadians(double angdeg): 角度->弧度.
max(double a, double b): a,b中的最大值.
min(double a, double b): a,b中的最小值.
BigInteger类
Integer最大为2^31-1,
Long最大为2^63-1,
BigInteger表示不可变的任意精度整数.
add(BigInteger val): 加+.
subtract(BigInteger val): 减-.
multiply(BigInteger val): 乘*.
divede(BigInteger val): 除/.
remainder(BigInteger val): 取模%.
abs: 绝对值.
pow(int exponent): 幂运算,返回this exponent的BigInteger.
BigDecimal类
一般Float类和Double类可以做科学计算或工程计算,但在商业模式中,要求数字精度比较高,故用到BigDecimal,表示不可变得任意精度的有符号的十进制数.
add(BIgDecimal val): 加+.
subtract(BigDecimal val): 减-.
multiply(BigDecimal val): 乘*.
divede(BidDecimal val): 除/ (注:除不尽的要指定算多少位).
String类
不可变,底层是final char[].
1. 两种赋值方式
- 字面量方式(区别于new)赋值,此时字符串声明在方法区中的常量池中(即 String s = “sss”).
- new String()赋值,声明在堆中,此时保存的地址值指向常量池.
2. 拼接时
- String常量与常量拼接,结果在常量池,且常量池中不会有相同内容的常量(基本数据都是变量,加final可变为常量).
- 拼接时其中有一个是变量,结果就会在堆中.
- 如果拼接结果调用intern(),返回值就在常量池中.
注: getByte(“编码集”) GBK占2字节(byte),UTF-8占3字节.
3. String类,StringBuffer类,StringBuilder类异同
String: 不可变得字符序列,底层用final char[].
StringBuffer: 可变的字符序列,线程安全的,效率低,底层用char[].
StringBuilder: 可变的字符序列,线程不安全的,效率高,底层用char[].
StringBuffer类与StringBuilder类大致相同,继承同一个类AbstractStringBuilder,方法都是一样的,区别于其内方法中是否加了synchronized来同步.
4. StringBuffer类,StringBuilder类的扩容机制
无参默认char[]大小为16,有参为参.lenth()+16.
当超出容量时,扩容为原来容量的2倍+2(这是默认情况,但如果append()过大时,就会直接扩容为append()的值得长度),同时将原先数组复制到新的数组中.
5. StringBuffer类,StringBuilder类的常用方法
StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
StringBuffer delete(int start,int end):删除指定位置的内容
StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
StringBuffer insert(int offset, xxx):在指定位置插入xxx
StringBuffer reverse() :把当前字符序列逆转
public int indexOf(String str)
public String substring(int start,int end):返回一个从start开始到end索引结束的左闭右开区间的子字符串
public int length()
public char charAt(int n )
public void setCharAt(int n ,char ch)
总结:
增:append(xxx)
删:delete(int start,int end)
改:setCharAt(int n ,char ch) / replace(int start, int end, String str)
查:charAt(int n )
插:insert(int offset, xxx)
长度:length();
遍历:for() + charAt() / toString()
System类
native long currentTimeMillis(): 时间戳(毫秒数),与1970年1月1日0时0分0秒的差.
void exit(int status): 0代表正常退出,非0代表异常退出.
void gc(): 请求系统垃圾回收,是否立即回收看情况.
String getProperty(String key): 获取系统属性,key值如下:
- System.getProperty(“java.version”)): Java运行环境版本.
- System.getProperty(“java.home”)): Java安装目录.
- System.getProperty(“os.name”)): 当前操作系统名称.
- System.getProperty(“os.version”)): 当前操作系统版本.
- System.getProperty(“user.name”)): 当前用户的账号名称.
- System.getProperty(“user.home”)): 当前用户的主目录.
- System.getProperty(“user.dir”)): 当前用户的工作目录.