Java学习(System类,StringBuilder类,包装类,Collection集合,Iterator接口/迭代器,增强for,泛型)

2022/1/10 1/17

1.System类的常用方法

package ln.javatest.day11.demo01;
/*
java.lang.System类中提供了大量的静态方法,可以获取系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:
    public static long currentTimeMillis():返回以毫秒为单位的当前时间
    public static void arraycopy(Object src,int srcPos,Object dest,it destPos,int length):
    将数组指定的数据拷贝到另一个数组中
*/


import java.util.Arrays;

public class Demo01System {
    public static void main(String[] args) {
        demo01();
        demo02();
    }
    /*
        public  static long currentTimeMillis():返回以毫秒为单位的当前时间
        用来测试程序的效率
        练习:
            验证for循环打印数字1-9999所需要使用的时间(毫秒)
        */
    private static void demo01(){
        //程序执行前,获取一次毫秒值
        long s = System.currentTimeMillis();;
        //执行for循环
        for (int i = 0; i < 9999; i++) {
            System.out.println(i);
        }
        //程序执行前,在获取一次毫秒值
        long e = System.currentTimeMillis();
        System.out.println("花了" + (e-s));
    }
    /*
        public static void arraycopy(Object src,int srcPos,Object dest,it destPos,int length):
        将数组指定的数据拷贝到另一个数组中
        参数:
            src:源数组
            scrPos:源数组中的起始位置
            dest:目标数组
            destPos:目标数组中的起始位置
            length:要复制的数组元素的数量
        练习:
            将src数组中前3个元素,赋值到dest数组 前3个位置上
            复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10]
            复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10]
        */
    private static void demo02(){
        //定义源数组
        int[] src = {1,2,3,4,5};
        //定义目标数组
        int[] dest = {6,7,8,9,10};
        System.out.println("复制前:" + Arrays.toString(dest));
        //使用System类方法arraycopy将src数组中前3个元素,赋值到dest数组 前3个位置上
        System.arraycopy(src,0,dest,0,3);
        System.out.println("复制后:" + Arrays.toString(dest));
    }
}

2.StringBuilder的原理:
1)String类:
        字符串是常量;它们的值在创建之后不能改变;
        字符串的底层是一个final修饰的数组,不能改变,是一个常量
        private final byte[ ] value;
        进行字符串相加,内存中就会有多个字符串,占用空间多,效率低下
        String s = "a"+"b"+"c" = "abc"
        首先是单独的三个字符串,a+b之后又多了一个字符串ab,变成四个字符串,
        再由ab+c变成abc,又多了一个字符串,一共五个字符串。
2)StringBuilder类:
        字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串)
        底层也是一个数组,但是没有被final修饰,可以改变长度
        byte[ ] value = new byte[16];
        StringBuilder在内存中始终是一个数组,占用空间少,效率高。
        如果超出了StringBuilder的容量,会自动扩容,再扩充16.

3.StringBuilder类中的构造方法和成员方法

package ln.javatest.day11.demo01;
/*
java.lang.StringBuilder类:字符串缓冲区,可以提高字符串的效率
构造方法:
    public StringBuilder():构造一个空的StringBuilder容器。
    public StringBuilder(String str):构造一个StringBuilder容器,并把字符串添加进去
成员方法:
    public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身。
    向缓冲区内容不断追加数据。
    参数:
        可以是任意的数据类型
    public  StringBuilder reverse():反转内容。
    public String toString():将缓冲区内容转换为字符串
*/

import com.sun.security.jgss.GSSUtil;

public class Demo01StringBuilder {
    public static void main(String[] args) {
        //有参/无参构造方法
        StringBuilder sb = new StringBuilder();
        System.out.println(sb); //
        StringBuilder sb1 = new StringBuilder("abc");
        System.out.println(sb1);  //abc
        //成员方法
        //使用append方法网StringBuilder中添加数据
        //向缓冲区内容不断追加数据。
        //append方法返回的是this
        StringBuilder sb2 = sb1.append("def");
        System.out.println(sb);  //
        System.out.println(sb1); //abcdef
        System.out.println(sb2); //abcdef
        System.out.println(sb1 == sb2); //true 两个对象是同一个对象,地址相同
        //使用append方法无需接受返回值
        sb1.append("efg");
        sb1.append("123");
        System.out.println(sb1);  //abcdefefg123
        System.out.println(sb2);  //abcdefefg123
        //链式编程:方法的返回值是一个对象,可以根据对象继续调用方法
        sb1.append("7").append("9").append("中");
        System.out.println(sb1);  //abcdefefg12379中
        System.out.println(sb2);  //abcdefefg12379中
        //reverse方法:将缓冲区内容进行反转
        sb1.reverse();
        System.out.println(sb1);  //中97321gfefedcba
        System.out.println(sb2);  //中97321gfefedcba
        //toString方法:将缓冲区内容转换为字符串
        String str = "Hello";
        System.out.println("str:" + str);  //str:Hello
        StringBuilder bu = new StringBuilder(str);
        //往stringBuilder中添加数据
        bu.append("world");
        System.out.println("bu:" + bu);  // bu:Helloworld
        System.out.println("str:"+ str);  //str:Hello
        //转换为字符串
        String s = bu.toString();
        System.out.println("s:" + s);  //s:Helloworld

    }
}

4.包装类
在java.lang包中,无需声明可以直接使用
基本数据类型的数据,使用起来非常的方便,但是没有对应的方法来操作这些数据
所以我们可以使用一个类,把基本类型的数据包装起来,这个类叫包装类
在包装类中可以定义一些方法,用来操作基本类型的数据
每个基本数据类型都对应一个包装类
int-->Integer        char-->character
其它类把数据类型首字母大写就行

5.装箱与拆箱


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值