第十一节 常用类

11.1String字符串的基本理解

①.String声明为final的,不可被继承

②.String实现了Serializable接口:表示字符串是支持序列化的。        

              实现了Comparable接口:表示String可以比较大小

③.String内部定义了final char[] value用于存储字符串数据

④.String:代表不可变的字符序列。简称:不可变性。


11.2.字符串创建的两种方式

String s1 = "abc";

String s2 = new String("abc");

s1:指向常量池

s2:①指向堆②指向常量池

intern()返回常量池地址


11.3String的常用方法

①intlength():返回字符串的长度:returnvalue.length

②charcharAt(intindex):返回某索引处的字符returnvalue[index]

③booleanisEmpty():判断是否是空字符串:returnvalue.length==0

④Stringtrim():返回字符串的副本,忽略前导空白和尾部空白

⑤booleanequals(Objectobj):比较字符串的内容是否相同

⑥intcompareTo(StringanotherString):比较两个字符串的大小

⑦Stringsubstring(intbeginIndex,intendIndex):返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。

⑧intindexOf(Stringstr):返回指定子字符串在此字符串中第一次出现处的索引


11.4String 与基本数据类型、包装类之间的转换

/*

String --> 基本数据类型、包装类:调用包装类的静态方法:parseXxx(str)

基本数据类型、包装类 --> String:调用String重载的valueOf(xxx)

*/

@Test

publicvoidtest1(){

Stringstr1="123";

intnum=Integer.parseInt(str1);

Stringstr2=String.valueOf(num);//"123"

System.out.println(str1==str3);

   }

}


11.5String、StringBuffer、StringBuilder三者的异同

String:不可变的字符序列;底层使用char[]存储

StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储

StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储


11.6StringBuffer的常用方法

增:append(xxx)

删:delete(intstart,intend)

改:setCharAt(intn,charch)/replace(intstart,intend,Stringstr)

查:charAt(intn)

插:insert(intoffset,xxx)

长度:length();

遍历:for()+charAt()/toString()


11.7对比String、StringBuffer、StringBuilder三者的效率

从高到低排列:StringBuilder > StringBuffer > String


11.8日期常用方法

//1.System类中的currentTimeMillis()

@Test

publicvoidtest1(){

longtime=System.currentTimeMillis();

//返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。

//称为时间戳

System.out.println(time);

}

//SimpleDateFormat的实例化

@Test

publicvoidtest2(){

//格式化:日期 --->字符串

Datedate=newDate();

SimpleDateFormatsdf1=newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");

//格式化

Stringformat1=sdf1.format(date);

System.out.println(format1);//2019-02-18 11:48:27

Datedate2=sdf1.parse("2020-02-18 11:48:27");

System.out.println(date2);

}

//DateTimeFormatter:格式化或解析日期、时间

//类似于SimpleDateFormat

@Test

publicvoidtest3(){

DateTimeFormatterformatter3=DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

//格式化

Stringstr4=formatter3.format(LocalDateTime.now());

System.out.println(str4);//2019-02-18 03:52:09

}


11.9Comparable接口与Comparator的使用

11.9.1Comparable接口的使用

1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,进行了从小到大的排列

2.对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法。

如果当前对象this大于形参对象obj,则返回正整数,

如果当前对象this小于形参对象obj,则返回负整数,

如果当前对象this等于形参对象obj,则返回零。

*/

@Test

publicvoidtest1(){

Goods[]arr=newGoods[5];

arr[0]=newGoods("lenovoMouse",34);

arr[1]=newGoods("dellMouse",43);

arr[2]=newGoods("xiaomiMouse",12);

arr[3]=newGoods("huaweiMouse",65);

arr[4]=newGoods("microsoftMouse",43);

Arrays.sort(arr);

System.out.println(Arrays.toString(arr));

   }

publicclassGoodsimplementsComparable{

privateStringname;

privatedoubleprice;

publicGoods() {

   }

publicGoods(Stringname,doubleprice) {

this.name=name;

this.price=price;

   }

publicStringgetName() {

returnname;

   }

publicvoidsetName(Stringname) {

this.name=name;

   }

publicdoublegetPrice() {

returnprice;

   }

publicvoidsetPrice(doubleprice) {

this.price=price;

   }

@Override

publicStringtoString() {

return"Goods{"+

"name='"+name+'\''+

", price="+price+

'}';

   }

//指明商品比较大小的方式:按照价格从低到高排序,再按照产品名称从高到低排序

@Override

publicintcompareTo(Objecto) {

if(oinstanceofGoods){

Goodsgoods=(Goods)o;

if(this.price>goods.price){

return1;

}elseif(this.price<goods.price){

return-1;

}else{

return-this.name.compareTo(goods.name);

           }

       }

thrownewRuntimeException("传入的数据类型不一致!");

   }

}

11.9.2Comparator接口的使用:定制排序

    @Test

publicvoidtest2(){

Goods[]arr=newGoods[6];

arr[0]=newGoods("lenovoMouse",34);

arr[1]=newGoods("dellMouse",43);

arr[2]=newGoods("xiaomiMouse",12);

arr[3]=newGoods("huaweiMouse",65);

arr[4]=newGoods("huaweiMouse",224);

arr[5]=newGoods("microsoftMouse",43);

Arrays.sort(arr,newComparator() {

//指明商品比较大小的方式:按照产品名称从低到高排序,再按照价格从高到低排序

@Override

publicintcompare(Objecto1,Objecto2) {

if(o1instanceofGoods&&o2instanceofGoods){

Goodsg1=(Goods)o1;

Goodsg2=(Goods)o2;

if(g1.getName().equals(g2.getName())){

return-Double.compare(g1.getPrice(),g2.getPrice());

}else{

returng1.getName().compareTo(g2.getName());

                   }

               }

thrownewRuntimeException("输入的数据类型不一致");

           }

       });

System.out.println(Arrays.toString(arr));

   }


11.10其他常用类的使用

@Test

publicvoidtest2() {

BigIntegerbi=newBigInteger("1243324112234324324325235245346567657653");

BigDecimalbd=newBigDecimal("12435.351");

BigDecimalbd2=newBigDecimal("11");

System.out.println(bi);

//除不尽报错

//System.out.println(bd.divide(bd2));

System.out.println(bd.divide(bd2,BigDecimal.ROUND_HALF_UP));

//指定小数点后面位数

System.out.println(bd.divide(bd2,25,BigDecimal.ROUND_HALF_UP));

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容