Java——String类4

1、三个类的对比:String、StringBuffer、StringBuilder

String:不可变的字符序列;底层使用char[] (jdk8及之前),底层使用byte[] (jdk9及之后)

StringBuffer:可变的字符序列;JDK1.0声明,线程安全的,效率低;底层使用charl] (jdk8及之前),底层使用byte[] (jdk9及之后)

StringBuilder:可变的字符序列;JDK5.0声明,线程不安全的,效率高;底层使用char] (idk8及之前),底层使用bytel] (jdk9及之后)

2、StringBuffer/StringBuilder的可变性分析(源码分析):回顾:

String s1 = new String();  //char[] value = new char[0]

String s2 = new String("abc");  // char[] value = new char[3]['a','b','c';]

针对于StringBuilder来说:

为部的属性有:

char[] value; //存储字符序列

int count;//实际存储的字符的个数

StringBuilder sBuffer1 = new StringBuilder(): //char[] value = new char[16];

StringBuilder sBuffer1 = new StringBuilder(“abc”): //char[] value = new char[16 +”abc”.length];
sBuffer1.append(“a”);  //value[0] = ‘a’; value[1] =c';

sBuffer1.append("b");//value[2] = b';

...不断的添加,一旦count要超过value.length时,就需要扩容:默认扩容为原有容量的2倍+2。并将原有vaLue数组中的元素复制到新的数组中。

3,源码启示:

>如果开发中需要频繁的针对于字符串进行增、删、改等操作,建议使用StringBuffer或StringBuilder替换String,因为使用String效率低。

>如果开发中,不涉及到线程安全问题,建议使用StringBuilder替换StringBuffer。因为使用StringBuilder效率高

4,StringBuffer和StringBuilder中的常用方法

增:

append(xx)

删:

delete(int start,int end)

deleteCharAt(int index)

改:

replace(int start,int end,String str)

setCharAt(int index,char c)

charAt(int index)

insert(int index,xx)

长度:

length()

其他API:

(1) int indexOf(string str): 在当前字符序列中查询str的第一次出现下标

(2) int index0f(String str, int fromindex): 在当前字符序列[fromindex,最后]中查询str的第一次出现下标

(3) int lastlndexOfString str): 在当前字符序列中查询str的最后一次出现下标

(4) int lastindex0fString str, int fromindex): 在当前字符序列[fromindex,最后中查询str的最后一次出现下标

(5)String substringint start): 截取当前字符序列[start,最后]

(6)String substring(int start,int end): 截取当前字符序列[start,end)

(7)string toString0: 返回此序列中数据的字符串表示形式

(8) void setLength(int newLength): 设置当前字

符序列长度为newLength

关于日期时间的API

一JDK之前的API

  1. System类的currentTimeMillis()

>获取当前时间对应的毫秒数,long类型,时间戳,\

>当前时间与1970年1月1日0时0分0秒之间的毫秒数

>常用来计算时间差

  1. 两个Date类

> |--Java.util.Date

>两个构造器的使用

    >两个方法的使用

(子类)|---Java.sql.Date:对应数据库中的date类型

public class DateTimeTest {

    public static void main(String[] args) throws ParseException {

        Date date1 = new Date(); //创建一个基于当前系统时间的Date实例

        System.out.println("当前系统时间:"+ date1.toString());//当前系统时间:Tue Jul 18 09:53:24 CST 2023



        long milliTinmes = date1.getTime();

        System.out.println("当前毫秒数是:" + milliTinmes);//当前毫秒数是:1689645204400



        Date date2 = new Date(1689644294479L);  //创建一个基于指定时间戳的Date的实例

        System.out.println(date2.toString());//Tue Jul 18 09:38:14 CST 2023



        DateTimeTest.test2();



        System.out.println();

        java.sql.Date date3 = new java.sql.Date(1689644294479L);

        System.out.println(date3.toString()); //2023-07-18

        System.out.println(date3.getTime());  //1689644294479



        //DateTimeTest.test3();

        DateTimeTest.test4();



}

      public static void test2(){



        java.sql.Date date1 = new java.sql.Date(1689644294479L);

        System.out.println(date1.toString());  //023-07-18



    }

你可能感兴趣的:(java,算法,数据结构)