学习java第七天#越努力越幸运#_数组

Java学习之数组(array)

定义:数组是相同数据类型的有序组合,数组也是对象,数组元素相当于对象的成员变量。

数组的长度确定,是不可变的。

1、数组的声明

                      eg:int[] a;

                             int a[];

2、数组的初始化(三种方式)

 ①int[] a = new int[3];          //通过new出来的都放在堆里面

    a[0] = 23;                         //数组长度为3,长度不能长于3

    a[1] = 26;

    a[2] = 85;

  ②动态

         

a.length  是数组a的长度。

  ③静态

简单例子:int [i] = {45,84,43};

3、String 类的常用方法:jdk的源码分析

在jdk源码中,有很多函数的编码,按住ctrl键左击鼠标便可以出来源码。

下面便是看源码的出的部分结论:

  ①替换字符串中的某个字符

             String  str1 = String(”ekdsf“)

             String  str - str1.replace(‘e’,‘w’):

运行结果为:wkdsf

  ②equals和”==“的区别

相同点:他们都是比较,当比较发现相同时,为true,当比较发发现不同时,为false

不同点:

equals:比较的是内容

==:比较的是地址

eg: (a)

  

由于str1和str2都是new出来的,虽然内容一样,但地址不一样

所以:运行之后为:true

                                    false

eg (b)

str3 和str4 都不是new出来的,他们内容相同,地址也相同

所以:运行之后为:true

                                    false

  ③ String  内存问题

我们看下面这个例子

下面是str6的内存图:

所以运行之后的结果为:a012

可以看出,在堆区产生了3+1个对象,很占内存,不好,一般不用这种方式字符串。

改善方法:

我们知道,String是不可变字符序列,那有没有可变的字符序列呢

这就要介绍两个新函数了:Stringbuilder(重点)和StringBuffer。它们都是可变字符序列

StringBuilder:线程不安全,效率高

StringBuffer:线程安全,效率低

StringBuilder默认长度为16,当StringBuilder(”hs“)的长度=本身的字符串长度+16;

####  append:追加

运行结果为:abcdefh

也可以叠加追加:

这是因为源码中append后面有return this,所以可多次追加。

 

append:有扩容功能,不用担心内存不够

比如建立的时候内存为17,但可以新建一个为2*n+2的内存替换原来的内存,大大减少了内存

eg

虽然运行结果和一样,但是却比他更加节省内存空间。

 

在看java中的Array源码包时,可以了解到:

             (Ⅰ)Array.toString           肢解打印数码顺序(从小到大);

              (Ⅱ)Array.fill(a,2,4,100)                //将[2,4)里的元素替换为100;

4、上述讲的数组都是一维数组,那下面来聊聊二维数组吧!!

  a、二维数组的声明

                                                 举个例子:int[][] a = new int[][]

  b、二维数组的初始化(有两种方式)

     第一种:

                                

      第二种:

由此可见,第一种初始化方式比较简单明了,我们通常采用第一种方式。

  c、二维数组的内存分析(草图)

到了最后补充一点:

        for  (int m:a){

             System.out.println(m);

           }

它的意思是,将长度为a的一维数组依次打印出来,结果和下列程序的运行结果一样:

for(int i = 0;i<a.length;i++){

    int m = a[i];

     System.out.println(m);

}