常用类
Arrays
操作数组的工具类
静态工厂
常用方法
static String toString(int[] a)
返回指定数组内容的字符串表示形式。
static boolean equals(int[] a, int[] a2)
如果两个指定的int数组彼此 相等 ,则返回 true 。
static boolean equals(int[] a, int aFromIndex, int aToIndex, int[] b, int bFromIndex, int bToIndex)
如果指定范围内的两个指定的int数组彼此 相等 ,则返回true。
注意
一般结束索引位置不包含
static String deepToString(Object[] a)
返回指定数组的“深层内容”的字符串表示形式。
static boolean deepEquals(Object[] a1, Object[] a2)
如果两个指定的数组彼此 深度相等 ,则返回 true 。
Arrays 工具类中数组拷贝相关方法
static int[] copyOf(int[] original, int newLength)
使用零复制指定的数组,截断或填充(如有必要),以使副本具有指定的长度。
original : 原数组
newLength : 新数组的长度
新数组长度=原数组长度
拷贝
新数组长度<原数组长度
截取
新数组长度>原数组长度
填充
默认从索引为0的位置开始拷贝
新数组,数据的拷贝是copyOf方法内部实现
static int[] copyOfRange(int[] original, int from, int to)
将指定数组的指定范围复制到新数组中。
新数组是由copyOfRange方法内部创建
一般结束索引不包含
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。
目的地新数组由自己指定
Arrays工具类
static void sort(int[] a)
将指定的数组按升序排序。
static void sort(int[] a, int fromIndex, int toIndex)
按升序对数组的指定范围进行排序。
static int binarySearch(int[] a, int key)
使用二进制搜索算法在指定的int数组中搜索指定的值。如果找不到返回 -插入点-1
static void fill(int[] a, int val)
将指定的int值分配给指定的int数组的每个元素。
static void fill(int[] a, int fromIndex, int toIndex, int val)
将指定的int值分配给指定的int数组的指定范围的每个元素。
String
String
特点
不可变长的字符序列
String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。
String str = "abc"; 1个对象 "abc"->常量池中new的对象在堆内存中 "abc"字符串常量->存在与字符串常量池中
String str2 = new String("haha"); 2个 new->堆 "haha"->常量池
String str3 = new String("abc"); 1个 new->堆
"abc"->常量池中已有
常用构造器
String(String original)
初始化新创建的String对象,使其表示与参数相同的字符序列;
String(char[] value)
分配新的 String ,使其表示当前包含在字符数组参数中的字符序列。
String(char[] value, int offset, int count)
分配一个新的 String ,其中包含字符数组参数的子数组中的字符。
String(byte[] bytes)
通过使用平台的默认字符集解码指定的字节数组构造新的 String 。
byte[] arr = str.getBytes()
utf-8->1汉字3个字节 gbk->1汉字2字节
String(byte[] bytes, int offset, int length)
通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String 。
StringBuffer|StringBuilder --> String
String(StringBuffer buffer)
分配一个新字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。
String(StringBuilder builder)
分配一个新字符串,其中包含当前包含在字符串构建器参数中的字符序列。
底层使用
private final byte[] value
存储字符串中的字符数据,在jdk11中底层使用byte[],在jdk8之中使用char[]
常用方法
char charAt(int index)
返回指定索引处的 char值。
int codePointAt(int index)
返回指定索引处的字符(Unicode代码点)。
int codePointBefore(int index)
返回指定索引之前的字符(Unicode代码点)。
int compareTo(String anotherString)
按字典顺序比较两个字符串。
str1.compareTo(str2)
返回值
>0 ==> str1>str2 正数
==0 ==> str1==str2 0
若第一个字符一样,则顺位比较第二个字符
<0 ==> str1<str2 负数
int compareTo(String anotherString)
按字典顺序比较两个字符串,忽略大小写差异。
int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,忽略大小写差异。
String concat(String str)
将指定的字符串连接到此字符串的末尾。
字符串连接符在jdk8中会默认先构建StringBuilder对象,做字符串拼接,最后toString方法转为字符串对象
boolean contains(CharSequence s)
当且仅当此字符串包含指定的char值序列时,才返回true。
boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结尾。
boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开头。
byte[] getBytes()
使用平台的默认字符集将此
String编码为字节序列,将结果存储到新的字节数组中。
byte[] getBytes(String charsetName)
使用命名的字符集将此 String编码为字节序列,将结果存储到新的字节数组中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将此字符串中的字符复制到目标字符数组中。
int indexOf(String str)
返回指定子字符串第一次出现的字符串中的索引。
int lastIndexOf(String str)
返回指定子字符串最后一次出现的字符串中的索引。
int length()
返回此字符串的长度。
String repeat(int count)
返回一个字符串,其值为此字符串的串联重复 count次。
String replace(CharSequence target, CharSequence replacement)
将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。
String[] split(String regex)
将此字符串拆分为给定 regular expression的匹配项 。
String trim()
返回一个字符串,其值为此字符串,删除了所有前导和尾随空格,其中space被定义为其代码点小于或等于 'U+0020' (空格字符)的任何字符。
只针对半角空格 有效,全角空格无效
String strip()
返回一个字符串,其值为此字符串,并删除了所有前导和尾随 white space 。
全角半角都有效
String stripLeading()
返回一个字符串,其值为此字符串,并删除了所有前导 white space 。
半角有效
String stripTrailing()
返回一个字符串,其值为此字符串,并删除所有尾随 white space 。
全角半角都有效
String substring(int beginIndex)
返回一个字符串,该字符串是此字符串的子字符串。
String substring(int beginIndex, int endIndex)
返回一个字符串,该字符串是此字符串的子字符串。
char[] toCharArray()
将此字符串转换为新的字符数组。
String toLowerCase()
使用默认语言环境的规则将此 String所有字符转换为小写。
String toUpperCase()
使用默认语言环境的规则将此 String所有字符转换为大写。
static String valueOf(boolean b)
返回 boolean参数的字符串表示形式。
boolean isBlank()
如果字符串为空或仅包含 white space代码点,则返回 true ,否则 false 。
boolean isEmpty()
返回 true ,当且仅当, length()是 0 。
String intern()
返回字符串对象的规范表示。
jdk1.7之后规则:
先判断字符串常量池中是否存在当前字符串常量,果存在直接返回常量池中对象的引用,如果不存在, 会拷贝一个当前对象的引用(地址)到常量池中,然后返回常量池中的引用
== 比较对象地址
equals 可以实现比较对象内容
StringBuffer
可变长的字符序列,同步的|线程安全的
注意: 以后某些结构底层使用数组存储数据,一般会存在默认的初始容量,减少扩容拷贝的次数,提高效率.
StringBuilder
可变长的字符序列,不同步|线程不安全,相对效率高
此类提供与StringBuffer兼容的API,继承相同的父类AbstractStringBuilder,但不保证同步|线程不安全。
此类设计用作StringBuffer替代品,用于单个线程使用字符串缓冲区的位置(通常情况下)大量操作字符串。
在可能的情况下,建议使用此类优先于StringBuffer因为在大多数实现中它会更快。
注意: 以后某些结构底层使用数组存储数据,一般会存在默认的初始容量,减少扩容拷贝的次数,提高效率.
String , StringBuilder , StringBuffer 区别
共同点
都是字符序列,表示子串
底层都是字节数组(老版本jdk字符数组)
区别
1.String 不可变长字符序列
StringBuffer|StringBuilder 可变长字符序列
2.执行效率:
StringBuilder > StringBuffer > String
String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。
3.同步方面:
StringBuilder 线程不安全
StringBuffer 同步
注意: 以后某些结构底层使用数组存储数据,一般会存在默认的初始容量,减少扩容拷贝的次数,提高效率.
StringBuilder
构造器
StringBuilder()
初始容量为16个字符。
StringBuilder(int capacity)
构造一个字符串构建器,其中没有字符,并且具有 capacity参数指定的初始容量。
StringBuilder(String str)
构造一个初始化为指定字符串内容的字符串构建器。
方法
length()
字符串对象中字符的个数
capacity()
底层数组的容量
StringBuilder append(boolean b)
将 boolean参数的字符串表示形式追加到序列中。
StringBuilder delete(int start, int end)
删除此序列的子字符串中的字符。
StringBuilder insert(int offset, String str)
将字符串插入此字符序列。
StringBuilder reverse()
导致此字符序列被序列的反向替换。
StringBuffer
构造器
StringBuffer()
初始容量为16个字符。
StringBuilder|StringBuffer 与 String之间相互转换
StringBuilder|StringBuffer --> String
1. 调用StringBuilder|StringBuffer的toString
2. new String(StringBuilder|StringBuffer)
3. String.valueOf(Object)
String --> StringBuilder|StringBuffer
1) StringBuilder|StringBuffer(String str)
包装类
基本数据类型-->包装类
byte
-->
Byte
short
-->
Short
int
-->
Integer
long
-->
Long
float
-->
Float
double
-->
Double
char
-->
Character
boolean
-->
Boolean
自动拆装箱
1.自动装箱 : 基本 --> 引用
2.自动拆箱 : 引用 --> 基本
基本类型与包装类对象比较问题
1.两个int类型比较,值相等就相等
2.两个new Integer比较,肯定不相等,new就新的地址
3.int与Integer|new Integer比较,只要值相等就相等,因为会先自动拆箱,再比值
4.两个Integer比较,如果值 在[-128,127]之间返回缓冲区对象相等,否则返回new Integer不相等
Math 数学相关类
方法
static double abs(double a)
返回 double值的绝对值。
static double ceil(double a)
返回大于或等于参数且等于数学整数的最小值(最接近负无穷大) double 。
static double floor(double a)
返回小于或等于参数且等于数学整数的最大值(最接近正无穷大) double 。
static int max(int a, int b)
返回两个 int值中较大的 int 。
static int min(int a, int b)
返回两个 int值中较小的 int 。
static double pow(double a, double b)
返回第一个参数的值,该值是第二个参数的幂。
static double random()
返回带有正号的 double值,大于或等于 0.0且小于 1.0 。
static long round(double a)
返回与参数最接近的 long ,并将关系四舍五入为正无穷大。
枚举
定义
确定一种事物的所有可能|实例
特点
枚举是类,特殊的枚举类型,具有枚举类型特殊的约束
定义枚举使用enum
枚举类中的字段默认为当前枚举类型的实例,修饰符默认为public static final
枚举类中可以根据需求定义成员,构造器...
枚举类中默认构造器私有化
自定义的枚举类型默认隐式的继承自
java.lang.Enum->这是所有Java语言枚举类型的公共基类。
方法
name()
枚举类字段名
ordinal()
获取枚举实例在枚举类中字段列表的序号,从开始
values()
获取当前枚举类型的所有实例
Date 时间日期类型
java.util包下的Date
构造器
Date()
分配 Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒。
Date(long date)
分配 Date对象并初始化它以表示自标准基准时间(称为“纪元”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。
方法
long getTime()
返回自此 Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数。
boolean after(Date when)
测试此日期是否在指定日期之后。
boolean before(Date when)
测试此日期是否在指定日期之前。
static Date from(Instant instant)
从 Instant对象获得 Date的实例。
Instant toInstant()
将此 Date对象转换为 Instant
DateFormat类和SimpleDateFormat类
DateFormat类应用于格式化和解析日期字符串。
SimpleDateFormat是一个用于以区域设置敏感的方式格式化和解析日期的具体类。 它允许格式化(日期→文本),解析(文本→日期)和规范化。
java8新增时间日期API
Date,SimpleDateFormat 线程不安全
JDK8当中提供的LocalTime、LocalDate 、 LocalDateTime等类型,线程安全,使用简单灵活
clone() 克隆,拷贝
来自Object类clone()方法
Cloneable接口 : 对象的类型要求实现Cloneable,才具有克隆的能力
java.lang.CloneNotSupportedException
抛出此异常表示已调用类Object中的clone方法来克隆对象,但该对象的类未实现Cloneable接口。
重写的细节
子类中的重写方法 父类中被重写的方法
== 方法签名完全相等
<= 返回值类型 : 基本数据类型要求完全相等
引用数据类型:重写方法的返回值类型<=被重写方法的返回值类型
>= 权限修饰符 : 重写方法的权限修饰符>=被重写方法的权限修饰符
浅拷贝|浅克隆
浅克隆
当拷贝对象的时候,对象的属性如果为引用数据类型,属性所指向的对象不拷贝
深克隆
当拷贝对象的时候,对象的属性如果为引用数据类型,属性所指向的对象也拷贝一份
建议
当对象的属性是通过复杂的运算或者算法计算出来,在想要等到相同内容的对象时候可以使用clone克隆,提高效率