Java常用类

和我一起学习Java吧,加油!


前言

Java常用类是Java中已经为我们整理好的类,可以直接使用其中定义的方法,极大提高了编码效率。


一、String、StringBuilder、StringBuffer

String : 不可变长的字符序列,在java中""包裹字符字符串常量–> 都为String类型的实例
StringBuilder 可变长字符序列,线程不安全,一般效率较高
StringBuffer 可变长字符序列,线程安全,一般效率较低

1.区别:

1.执行效率 : StringBuilder>StringBuffer>String
2.线程安全 : StringBuffer线程安全

2.建议

少量做字符串操作推荐使用String
单线程环境下大量对字符串做操作推荐StringBuilder
多线程环境下大量操作字符串推荐StringBuffer

3.String

作用与特点
底层存储字符串数据的结构 : jdk11->private final byte[] value; jdk8->private final char[] value;
构造器
功能

常用方法

此处仅罗列部分具体可查询在API中查询

String str1 = "abcabchahahehe";
String str2 = "Abcabchahahehe";
//char charAt(int index) 返回指定索引处的 char值
System.out.println(str1.charAt(3));
//int codePointAt(int index) 返回指定索引处的字符(Unicode代码点)。
System.out.println(str1.codePointAt(3));
//int codePointBefore(int index) 返回指定索引之前的字符(Unicode代码点)。
System.out.println(str1.codePointBefore(3));
/*
	比较两个字符串大小
	int compareTo(String anotherString) 按字典顺序比较两个字符串。
	返回值 : int类型
		0  --> 相等
		负数 --> this<参数对象anotherString
		正数 --> this>参数对象anotherString
*/
System.out.println(str2.compareTo(str1));
//int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,忽略大小写差异。
System.out.println(str2.compareToIgnoreCase(str1));

4.StringBuilder

一个可变的字符序列。 此类提供与StringBuffer兼容的API,但不保证同步。
此类设计用作StringBuffer替代品,用于单个线程使用字符串缓冲区的位置(通常情况下)。
在可能的情况下,建议使用此类优先于StringBuffer因为在大多数实现中它会更快。
底层存储数据结构 : byte[] value; 默认初始容量为16 扩容机制 : int newCapacity = (oldCapacity << 1) + 2;

注意 :
    很多结构底层为数组,会涉及到数组的初始容量,以及扩容机制问题,需要关注

二、Array

介绍

操作数组的工具类,该类包含用于操作数组的各种方法(例如排序和搜索)。
静态工厂–>包含的都是静态方法

常用方法

//返回数组内容的字符串表示形式
Arrays.toString(arr)

//返回指定数组的“深层内容”的字符串表示形式。-->针对于多维数组
Arrays.deepToString(arr)

//如果两个指定的数组彼此 相等 ,则返回 true
Arrays.equals(arr1,arr2)

//如果两个指定的数组彼此 深度相等 ,则返回 true
Arrays.deepEquals(arr3,arr4)

//数组拷贝
/*
static int[] copyOf(int[] original, int newLength) 使用零复制指定的数组,截断或填充(如有必要),以使副本具有指定的长度。
参数 :
	original 原数组
    newLength  新数组长度
    newLength == original.length     拷贝
    newLength < >original.length     截取
    newLength > >original.length     填充
返回值 :
    新数组(已经拷贝完毕之后的新数组)
注意:
    copyOf 方法内部会做数据的拷贝+新数组的创建
    只能从原数组索引为0的位置开始拷贝,不能实现拷贝原数组某一段指定区间的数据
*/
Array.copyOf(arr,0)

/*
static int[] copyOfRange(int[] original, int from, int to) 将指定数组的指定范围复制到新数组中。
参数 :
	original 原数组
    from 起始索引
    to   结束索引
返回值 :
    新数组(已经拷贝完毕之后的新数组)
注意:
    copyOfRange 方法内部会做数据的拷贝+新数组的创建
    结束索引不包含
*/
Arrays.copyOfRange(arr1,1,3)


/*
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。
参数 :
	src 原数组
    srcPos : 原数组要被的起始索引
    dest 新数组
    destPos : 拷贝到新数组的指定索引
    length 拷贝数据的个数
注意: 只做数据拷贝,不创建新数组
*/
         
//static void fill(boolean[] a, boolean val) 将指定的布尔值分配给指定的布尔数组的每个元素。
boolean[] arr = new boolean[8];
Arrays.fill(arr,true);

//static void fill(boolean[] a, int fromIndex, int toIndex, boolean val) 将指定的布尔值分配给指定的布尔数组的指定范围的每个元素。  -->结束索引位置不包含
Arrays.fill(arr,3,6,false);

/*
排序 :
static void sort(int[] a) 将指定的数组按升序排序。
static void sort(int[] a, int fromIndex, int toIndex) 按升序对数组的指定范围进行排序。
*/
Arrays.sort(arr1);

//static int binarySearch(int[] a, int key) 使用二进制搜索算法在指定的int数组中搜索指定的值。
Arrays.binarySearch(arr1,14); 
//如果存在返回索引,如果不存在返回-插入点-1

三、DataType

基本数据类型包装类

介绍

有了基本数据类型为什么还要提供包装类 :

包装类是类,类中可以提供封装很多功能
集合等结构中只能存储引用数据类型的数据
在具体业务下,表示类似余额等数据,包装类型默认值为null与0|0.0,能区分就没充值,余额为0等两种状态

有了包装类还要保留基本数据类型:

基本数据类型有利于节省内容
jdk5新增 :自动拆装箱
    基本<-->包装类
    自动装箱:  基本--> 引用
    自动拆箱:  引用--> 基本

包装类

    byte            --->            Byte
    short           --->            Short
    int             --->            Integer
    long            --->            Long
    float           --->            Float
    double          --->            Double
    boolean         --->            Boolean
    char            --->            Character

基本类型与包装类对象比较问题

在数据值相同的情况下 :
	1.两个new的对象,堆内存地址不同,不相等
    2.如果基本数据类型与包装类之间(Integer|new Integer),都会先发生自动拆箱,然后再比较,值相等就相等
    3.如果两个Integer比较,如果在[-128,127]之间返回缓冲区对象相等,否则返回new Integer()不相等

四、Date

Date类表示特定的时刻,精度为毫秒。

常用方法

//Date() 分配 Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒。
Date date = new Date();  //当前时间

//Date(long date) 分配 Date对象并初始化它以表示自标准基准时间(称为“纪元”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。
Date date2 = new Date(218479873987L);

//boolean after(Date when) 测试此日期是否在指定日期之后。
date.after(date2);
//boolean before(Date when) 测试此日期是否在指定日期之前。
date.before(date2);

//long getTime() 返回自此 Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数。
date2.getTime();

五、SimpleDateFormat

格式转换器SimpleDateFormat
实现字符串与日期对象相互转换的问题

使用步骤 :
    1) 创建转换器-->指定格式的模板
    2) 根据指定的格式默认做字符串与日期之间转换问题

常用方法

//默认模板
SimpleDateFormat simple = new SimpleDateFormat(); 

//自定义模板 2020-12-15 06:41:00 888
SimpleDateFormat simple2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS");

//format(Date)  日期对象转换字符串
String dateStr = simple.format(new Date());// 2022/5/14 下午3:41

 //字符串转为日期对象
Date date= simple.parse("2021/11/15 下午5:41");


六、枚举类型enum

枚举类型 : 确定一种事物|类的所有可能,所有实例

介绍

枚举也是类,但是定义特殊,具有特殊的约束
使用enum定义枚举
枚举类型中的字段默认作为当前枚举类型的实例,枚举类型的实例智能通过字段提供,枚举类型的实例通能在外部通过new构建
所有的通过enum定义的枚举类型,默认继承自java.lang.Enum类型
枚举类型中的字段定义默认被public static final修饰
枚举类型中可以定义成员,构造器....
枚举类型中的构造器,默认私有的

用法

//enum 类名
enum WeekDay{
    //字段列表
    DAY1,DAY2,DAY3,DAY4,DAY5,DAY6,DAY7;
}

七、Math

Math类 : 数学相关类型
静态工厂

常用方法

//static double PI double值比任何其他 pi更接近,圆的圆周与其直径的比率。
System.out.println(Math.PI);

//static int abs(int a) 返回 int值的绝对值。
System.out.println(Math.abs(-1.1));

//static double ceil(double a) 返回大于或等于参数且等于数学整数的最小值(最接近负无穷大) double 。
System.out.println(Math.ceil(1.1));

//static double floor(double a) 返回小于或等于参数且等于数学整数的最大值(最接近正无穷大) double 。
System.out.println(Math.floor(-1.9));

//static int max(int a, int b) 返回两个 int值中较大的 int 。
//static double min(double a, double b) 返回两个 double值中较小的 double 。
//static double pow(double a, double b) 返回第一个参数的值,该值是第二个参数的幂。
System.out.println(Math.pow(2,3));

总结

以上所列只是几个较为常用的类及其部分方法,Java中我我们构建了很多类,具体可在使用时进行查找,降低编码难度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值