Notes11 day11 StringBuilder

文章详细介绍了Java中的StringBuilder和StringBuffer类,包括它们的区别、构造方法、常用方法如append、insert、delete、replace等。此外,还提到了Math类的常用数学方法,Arrays类的数组操作,System类的系统相关方法,以及包装类的概念和转换。最后讨论了Date、DateFormat和Calendar类在处理日期和时间时的角色和用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

day11 StringBuilder

StringBuilder和StringBuffer 的概述

区别

二者所有的方法都一样,构造方法也是,他们都具有方法缓冲区,相当于一个容器,内容是可以改变的

StringBuilder 是不同步的,数据不安全,效率高

StringBuffer是同步的,数据安全,效率低

二者不能向String 一样不创建对象直接赋值

StringBuilder和StringBuffer构造方法

public class StringBuilderDemo01{
    public static void main(String[] args) {
​
```java
    //StringBuffer()   创建一个字符串容器  16
    StringBuilder sb = new StringBuilder();//16
​
    System.out.println(sb);//应该一个对象的地址值,一个空?
    System.out.println(sb.length());//0
    System.out.println(sb.capacity());//16
    System.out.println("-------------------------");
​
    // StringBuffer(int capacity)
    StringBuilder sb2 = new StringBuilder(4);//4
    System.out.println(sb2);
    System.out.println(sb2.length());//0   有容量不一定有内容
    System.out.println(sb2.capacity());//4
​
    System.out.println("-------------------------");
    // StringBuffer(String str)
    StringBuilder sb3 = new StringBuilder("hello");
    System.out.println(sb3.length());//5 是内容的长度
    System.out.println(sb3.capacity());//5? 16? 5+16=21
}
```
​
}

具体原理进入二者的类中查看

总结:StringBuilder sb = new StringBuilder() 默认创建容器空间 16

StringBuilder sb = new StringBuilder(int n); 创建容器空间 n

StringBuilder sb = new StringBuilder("asb");创建容器空间 16+3

而这常用的方法

添加方法

append() insert(int n , String s)//这个需要指定位置添加

StringBuilder sb = new StringBuilder()

sb.append("hello");//hello

sb.append("111");//hello111

链式写法

sb.append("hello").append("111");//hello111

StringBuilder sb = new StringBuilder("hello");

sb.insert(5,11);hello11

删除方法

deleteCharAt(int indexof)

delete(int start,int end) [start,end)

StringBuilder sb = new StringBuilder("hello");

sb.deleteChar(1); //hllo

sb.delete(1,3);//hlo

替换方法

replace(int start,int end,String str) [start,end)

StringBuilder sb = new StringBuilder("hello");

sb.replace(1,3,"aaaa");//haaaalo

反转方法

reverse()

StringBuilder sb = new StringBuilder("hello");

sb.reverse();//olleh

转换方法

toString();

将StringBuilder 转换成 String

StringBuilder sb = new StringBuilder("hello");

String s = sb.toString();

String s1 = new String(sb);

String 类转换成 StringBuilder

方式一

String s = "aaabbb"

StringBuilder s1 = new StringBuilder(s);

方式二

StringBuilder s2 = new StringBuilder();

s2.append(s);

二者与String的区别

String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。同步 ,是最安全的,效率最低的

StringBuilder和StringBuffer的每次扩容原理

若是这种形式 StringBuilder sb = new StringBuilder();

默认情况下,StringBuilder会将容量扩大为当前容量的两倍加上2

若是 StringBuilder sb = new StringBuilder( int n);

容量扩容 n*2+2;

若是StringBuilder sb = new StringBuilder( String str);

容量扩容 str.length() + 16

Math类

没有构造方法

Math类常用方法

方法名说明
Math.PI常量,圆周率
public static double abs(double num)取绝对值
public static double ceil(double num)向上取整
public static double floor(double num)向下取整
public static long round(double num)四舍五入
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()随机数,随机的范围[0,1)

Arrays类

概述

java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来非常简单。简单来说:Arrays这个是专门用来操作数组相关的工具类

常用方法

public static String toString(int[] a) 将数组转变为字符串,不止适用于int数组

public static void sort(int[] a) 对指定的int型数组按数字升序进行排序。 相当于冒泡排序

binarySearch(int[] a, int key) 使用二叉搜索算法搜索指定的int数组的指定值,不止适用于与于int数组

binarySearch(int[] a, int fromIndex, int toIndex, int key) 使用二叉搜索算法搜索指定值的指定数组的范围。只不过定义了查找范围,不止适用于与于int数组

System 类

概述

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作

常用的方法

public static long currentTimeMillis() 返回以毫秒为单位的当前时间。

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 将源数组指定的元素,覆盖到目标数组指定的元素

public static void exit(int status) 用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他为异常状态

三大属性

    • Modifier and TypeField and Description
      static PrintStreamerr “标准”错误输出流。
      static InputStreamin “标准”输入流。
      static PrintStreamout “标准”输出流。

out 的应用理解

PrintStream out = System.out;//返回了一个PrintStream类的对象
out.println();

in 的应用理解

InputStream in = System.in; //返回了一个InputStream
Scanner scanner = new Scanner(in);

err 的应用理解

System.err.println("nihao");
PrintStream err = System.err;
err.println("nihao");

包装类

概述

Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:

基本类型对应的包装类(位于java.lang包中)
byteByte
shortShort
int==Integer==
longLong
floatFloat
doubleDouble
char==Character==
booleanBoolean

什么是装箱

从基本类型转换为对应的包装类对象

什么是拆箱

从包装类对象转换为对应的基本类型

为什么要将基本数据类型转换成包装类对象

基本数据类型功能太单一了

包装类和基本数据类型的区别

以int 为例

int 是基本数据类型, Integer是int的包装类

int 默认值为0 , Integer的默认值null

以Integer与int为例演示他们之间的转换

  • 基本类型 转 包装对象(自动装箱)

    Integer i = new Integer(4);//使用构造函数函数
    Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法
    Integer ii = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
    ii = ii + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5;
    //加法运算完成后,再次装箱,把基本数值转成对象。
  • 包装对象 转 基本类型(自动拆箱)

    int num = i.intValue();

基本数据类型与String类型的转换

基本数据类型转String类型

只需要记住valueOf

String s = String.valueOf(数据);

String类型转基本数据类型

基本数据类型 变量名 = 基本数据类型的包装类.parse首字母大字的数据基本类型(字符串)

注意事项

如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常

BigInteger类和BigDecimal类

时间日期类

Date类

概述

java.util.Date类 表示特定的瞬间,精确到毫秒。

继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。

常用构造方法

无参构造

public Date()

分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)

// 创建日期对象,把当前的时间
        System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2020
有参构造

public Date(long date)

分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。

System.out.println(new Date(165));//Thu Jan 01 08:00:00 CST 1970   由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒  所以跟据这个时间通过传入的毫秒数来推断 出 Thu Jan 01 08:00:00 CST 1970

常用方法

public long getTime()

把日期对象转换成对应的时间毫秒值

Date date = new Date();
    // 获取从1970年到现在的毫秒值差
    long time = date.getTime();
    System.out.println(time);

DateFormat类

DateFormat类概述

java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

  • 格式化:按照指定的格式,从Date对象转换为String对象。

  • 解析:按照指定的格式,从String对象转换为Date对象。

常用的构造方法

public SimpleDateFormat()

用默认的模式和默认语言环境的日期格式符号构造SimpleDateFormat

public SimpleDateFormat(String pattern)

用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。

DateFormat的常用方法

public String format(Date date)

将Date对象格式化为字符串。

// Date --> String
        Date d = new Date();
        // 创建格式化对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String s = sdf.format(d);
        System.out.println(s);

public Date parse(String source)

将字符串解析为Date对象。

    //String --> Date
    String str = "2019-08-08 12:12:12";
    //在把一个字符串解析为日期的时候,请注意格式必须和给定的字符串格式匹配
    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date dd = sdf2.parse(str);
    System.out.println(dd);

Calendar类

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法

public static Calendar getInstance()创建,返回子类对象

Calendar cal = Calendar.getInstance();

==Calendar类中提供很多成员常量,代表给定的日历字段:==

字段值含义
YEAR
MONTH月(从0开始,可以+1使用)
DAY_OF_MONTH月中的天(几号)
HOUR时(12小时制)
HOUR_OF_DAY时(24小时制)
MINUTE
SECOND
DAY_OF_WEEK周中的天(周几,周日为1,可以-1使用)

Calendar类常用方法

public int get(int field)

返回给定日历字段的值。

 Calendar cal2 = Calendar.getInstance();
        //获取当前日期
        int year = cal2.get(Calendar.YEAR);
        int month = cal2.get(Calendar.MONTH)+1;
        int day = cal2.get(Calendar.DAY_OF_MONTH);
        int hour = cal2.get(Calendar.HOUR_OF_DAY);
        int minute   = cal2.get(Calendar.MINUTE);
        int second = cal2.get(Calendar.SECOND);
        System.out.println(year+"年"+month+"月"+day+"日");//2021年10月26日
        System.out.println(hour+"时"+minute+"分"+second+"秒");

public abstract void add(int field, int amount)

根据日历的规则,为给定的日历字段添加或减去指定的时间量。

    Calendar cal2 = Calendar.getInstance();   //2021 10 26
    //修改日期
    cal2.add(Calendar.DAY_OF_MONTH,2);//加2天
    cal2.add(Calendar.YEAR,-2);//减2年
    //修改后重新获取
    int year2 = cal2.get(Calendar.YEAR);
    int month2 = cal2.get(Calendar.MONTH)+1;
    int day2 = cal2.get(Calendar.DAY_OF_MONTH);
    
    System.out.println(year2+"年"+month2+"月"+day2+"日");//2019年10月28日

public void set(int field, int value)

将给定的日历字段设置为给定值

Calendar cal = Calendar.getInstance();
//单个设置
        设置时间
        cal.set(Calendar.YEAR, 2021);
        cal.set(Calendar.MONTH, 11);
        cal.set(Calendar.DAY_OF_MONTH, 26);
//多个设置
        cal.set(2021,7,24,13,20,19);

public Date getTime()

返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象

Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        System.out.println(date); // Tue Jan 16 16:03:09 CST 2018

注意

==西方星期的开始为周日,中国为周一。 在Calendar类中,月份的表示是以0-11代表1-12月。日期是有大小关系的,时间靠后,时间越大。==

Calendar和Date互转

//Calendar转Date
Calendar c = Calendar.getInstance();
Date d = c.getTime();
​
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String s = simpleDateFormat.format(d);
System.out.println("Calendar转Date为:"+s);
//Date转Calendar
//创建日期对象
Date d = new Date();
        
//创建日历对象
Calendar c = Calendar.getInstance();
c.setTime(d );
        
System.out.println(c.get(Calendar.YEAR) +"-"+(c.get(Calendar.MONTH)+1)+"-"+c.get(Calendar.DATE));

Date和Calendar有什么区别

区别:比较明显的区别是Date是日期,Calendar是日历,Date是类,Calendar是抽象类。当然,你也可以觉得Calendar是Date的加强版,今后如何使用呢? 都会使用,Calendar功能更强大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值