JAVA学习之第四周记

String类

1.String类又称作不可变字符序列。【核心数组为char value[],用final修饰,不可改变。
2.String位于java.lang包中,Java程序默认导入java.lang包下的所有类。
3.Java字符串就是Unicode字符序列,例如字符串“Java”就是4个Unicode字符’J'、’a'、·v'、’a’组成的。
4.Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例。

5.Java允许使用符号“+”把两个字符串连接起来。

package stringlx;

public class TextString {

		public static void main(String[]args){
		String str="abc";
		String str2 = new String("def");
		String str3="abc"+"defgh";
		String str4 = "19" +37; //不是加法,是字符串连接符。
		System.out.println(str4);
		}

}

得到 1937

n-符号"+"把两个字符串按给定的顺序连接在一起,并且是完全按照给定的形式。
n-当"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转
换为字符串然后再进行连接。

null表示对象为空,不存在。" "存在字符串对象,只是内容为空字符序列

可变与不可变字符的使用陷阱

public class Test {

    public static void main(String[] args){/**使用String进行字符串拼接*/

        String str8="";

        //本质上使用StringBuilder拼接,但每次循环都会生成一个StringBuilder对象

        long num1=Runtime.getRuntime().freeMemory();//获取系统剩余内存空间

        long time1=System.currentTimeMillis();//获取系统的当前时间

        for (int i=0;i<5000;i++){

            str8=str8+i;//相当于产生了10000个对象

        }

        long num2=Runtime.getRuntime().freeMemory();

        long time2=System.currentTimeMillis();

        System.out.println("String占用内存:" +(num1-num2));

        System.out.println("String占用时间:" +(time2-time1));

        /**使用StringBuilder进行字符串拼接*/

        StringBuilder sb1=new StringBuilder("");

        long num3=Runtime.getRuntime().freeMemory();

        long time3=System.currentTimeMillis();

        for (int i=0;i<5000;i++){

            sb1.append(i);

        }

        long num4=Runtime.getRuntime().freeMemory();

        long time4=System.currentTimeMillis();

        System.out.println("StringBuilder占用内存:" +(num3-num4));

        System.out.println("StringBuilder占用时间:" +(time4-time3));

    }

}

常量池·

一般我们字符串比较的时候,通常情况只比较他们的值是否相等,所以通常比较字符串是使用equals,而使用双等于号比较是比较不同变量的对象是否相同。对象相同,定义的字符串都会放在常量池地址是相同的 

 string类常用方法


String类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”。“不可变对象”指的是对象内部的成员变量的值无法再改变。

在遇到字符串常量之间的拼接时,编译器会做出优化,即在编译期间就会完成字符串的拼接,因此,在使用==进行String对象之间的比较时,我们要特别注意

StringBuffer与StringBuilder

StringBuilder和StringBuffer称之为“可变字符序列”。StringBuffer和StringBuilder非常类似,均代表可变的字符序列。这两个类都是抽象类AbstractStringBuilder的子类,方法几乎一模一样。
区别:
StringBufferJDK1.0版本提供的类,线程安全,做线程同步检查,效率较低。
StringBuilder JDK1.5版本提供的类,线程不安全,不做线程同步检查,因此效率较高。建议采用该类。

·常用方法列表:
1.重载的public StringBuilder append(..)方法
可以为该StringBuilder对象添加字符序列,仍然返回自身对象。
2.方法 public StringBuilder delete(int start,int end)可以删除从start开始到end-1为止的一段字符序列,仍然返回自身对象。
3.方法 public StringBuilder deleteCharAt(int index)移除此序列指定位置上的char,仍然返回自身对象。
4.重载的public StringBuilder insert(..)方法
可以为该StringBuilder对象在指定位置插入字符序列,仍然返回自身对象。
5.方法 public StringBuilder reverse()
用于将字符序列逆序,仍然返回自身对象。
6.方法public String toString()返回此序列中数据的字符串表示形式。
7.和String类含义类似的方法:

public int indexOf(String str)
public int indexOf(String str,int fromIndex) public String substring(int start)
public String substring(int start,int end)
 public int length()
char charAt(int index)

 

 append

StringBuffer的append函数,链接字符串时,效率要远远高于"+",特别是在使用循环时。一旦循环次数高起来,使用“+”,会导致系统崩溃,主要原因在于,工程建立后,大量用户调用该函数,同时进行多次该循环,耗费大量内存导致系统崩溃,而append在使用时不会创建内存,非常实用而且效率高

利用reverse实现倒序

 delete,insert,setCharAt的使用

 得到:我zyx高v爱uts你rqponmlkjihgfedcba

Date 

计算机世界,我们把1970年1月1日00:00:00定位基准时间,每个量度单位是毫秒。
我们用long类型的变量表示,如果想获得现在时刻的时刻数值可以使用:Long now=system curentTime Millis();

这个“时刻数值”是所有时间类的核心值,年月日都是根据这个“数值”计算出来的。

·DateFormat

DateFormat类的作用把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。DateFormat是一个抽象类,一般使用它的的子类SimpleDateFormat类来实现。

DateFormat与SimpleDateFormat的使用

 代码中格式化字符的具体含义

Calendar

Calendar类是一个抽象类,为我们提供关于日期计算的相关功。
GregorianCalendar是Canada的一个具体子类,提供了世界上大多数国家,地区使用的标准日历系统 

菜鸟雷区
注意月份的表示,一月是0,二月是1,以此类推,12月是11。因为大多数人习惯于使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表示月份:JANUARY、FEBRUARY等等。

获得日期方法

Calendar与date互化

public static void main(String[] args) {
    Date date = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
}
public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.YEAR,2021);
    calendar.set(Calendar.MONTH,11);
    calendar.set(Calendar.DAY_OF_MONTH,6);
    calendar.add(Calendar.DAY_OF_MONTH,2);
    Date time = calendar.getTime();
}

List

java.util.List接口继承了java.util.Collection接口,因此List接口的实现类都实现了Collection接口的方法,这样List接口的实现类的对象都可以调用来自于Collection接口的方法。
List接口的常用实现类
1,ArrayList
2.LinkedList
3.CopyOnWriteArrayList 并发 

List集合的特点
1.List集合是有序的,即数据存取的顺序一致,元素可以重复
2.List集合中的元素有对应顺序的索引。

常用方法

1. 基于索引添加元素
- add(int index, E element); 往集合中指定的索引添加元素
- addAll(int index, Collection<? extends E> c);往集合中指定索引添加指定的集合

public void testListAddA11(){
List<string> cities=new ArrayList>();
cities.add(0,"北京");
cities.add(1,"上海");
cities.add(2,"广州");
cities.add(3,"深圳");
system.out.print1n(”往集合中指定的索引添加元素 集合的元素内容是"+cities);
List<String> othercities=new ArrayList<>();
othercities.add("重庆");
othyrcities.add("成都");
othercities.add("武汉");
othercities.add("杭州");
//在深圳的后面加其他的城市
int index=cities.size();
cities.addA11(index, othercities);
System.out.print1n("往集合中指定索引 添加指定的集合集合的元素内容是"+cities);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尚膳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值