Bootstrap

【Java学习】数组

一、方法重载

两个不同的方法以方法名参数列表(数据类型、个数、顺序)不同而不同,方法名相同参数列表不同的不同方法之间就形成了方法重载


二、引用

存储非真实地址哈希值的变量是引用变量,数组类型创建的数组变量字符串变量里面存的都是哈希值,它存的量是固定的,就一个唯一的哈希值的量,并不是直接存数组多且不确定的所有元素、字符串那么多且不确定个数字符的量,真那样存,创建的变量大小大就算了,而且还不确定,要根据赋值的情况来定,用创建固定大小存储固定大小的哈希值的变量,这样创建时元素很多要存的很多但变量的大小也是直接固定的而且通过存储的哈希值也能对所存储的所有进行全部的管理

数组名即数组类型创建的一个变量,它里面存哈希值,字符串类型创建的字符串变量里面也存的是哈希值,能通过它访问所有的字符即字符串,数组与字符串都是引用类型


三、栈

方法在调用执行时,会在栈上开辟空间存储关于方法执行时的相关信息,如方法里的局部变量、返回地址在方法执行结束后,该方法在栈上开辟的空间就被销毁回收


四、堆

有被指向性的空间都是在堆上创建的创建空间给引用变量,引用变量里存的哈希值哈希值所指向的空间就是在堆上创建的

  • 比如创建一个String a = "abcd",引用变量字符串变量a(引用变量本身不在堆上)里存的是哈希值,哈希值所指向的空间在堆上,那一块空间里存的值是字串"abcd",
  • 比如new int[10],new开辟后返回的是指向该开辟空间的哈希值new int[10]本身整体就相当于指向该开辟空间的哈希值所有new开辟的空间是有被指向的,所有new开辟的空间是在堆上开辟的

堆上创建的空间当其没有被指向时,就会被销毁,如栈上的创建的引用局部变量,当方法结束时,栈上该方法创建的空间被销毁引用等那些所有局部变量也被销毁,引用里面存的哈希值也不在了,对应所指向的堆上开辟的空间也一定被销毁了除非销毁引用前有将它里面的哈希值返回出去给指)

哈希值所指向的是对象,对象一定在堆上,引用不一定在栈上(如果该引用变量被指时,即二级被指时,第二级指向该引用变量的引用在栈上,第一级引用被第二级引用指向的在堆上)


五、数组的赋值

new int[10]没有给值的都默认全是0)、new int[]{1,2,3}都是数组的赋值内容

当数组初始化时,赋有具体内容new int[]{1,2,3}的可省略new int[],直接赋{1,2,3}


数组工具的方法

import java.util.Arrays ——> 用import去导数组工具的包,数组工具里有所有操作数组的方法 

一、数组打印

Arrays.toString

Arrays.toString(数组变量)返回化成字符串内容的指向该字符串的String类型的哈希值

将数组变量里所指向存放的内容化为一块字符串(在堆上)存到一个指向性字符串变量并将该字符串变量(里的值哈希值)返回,Arrays.toString(数组变量)整体就相当于指向该字符串的哈希值,然后我们可以用System.out.println(哈希值)将所指向的字符串内容打印出来,即System.out.println(Arrays.toString(ret))


二、数组拷贝

1. Arrays.copyOf

Arrays.copyOf(拷贝对象源数组变量,拷贝来的新数组长度),返回创建的拷贝新数组变量的值(哈希值)

默认是从源数组对象的起始索引位置开始,拷贝那么长的内容,放到新建的新数组那,输入的拷贝新数组长度多长,创建的新数组长度就多长如果输入的新数组的长度大于源数组长度,也创建新长度那么大的数组从源数组能拷贝多少就拷贝多少,要拷贝的超过了原数组内容就拷贝最大的源数组所有内容(不会报错),拷贝后的效果是创建了一个源数组的扩容新数组

也可以指定位置范围拷贝:

Arrays.copyOf(拷贝的对象数组,指定始下标,指定末下标),返回新数组变量的哈希值

即拷贝源数组[ 指定起下标,指定末下标)索引内的内容,Java里所有的范围都是左闭右开

2. System.arraycopy

也可以用本地的系统的数组拷贝方法:

System.arraycopy(源数组,源数组指定始下标,目的数组,目的数组始下标,拷贝的长度),返回void

这里的话如果拷贝长度超过了源数组的长度或目标数组的长度会报错的(而Arrays工具里的创建新数组的超过了被视为扩容不会报错)


三、数组数据填充

Arrays.fill

Arrays.fill(填充的目标数组,填充的数据),方法返回void

将目标数组全部填充为填充数据,也可以指定范围填充:

Arrays.fill(填充的目标数组,始下标,末下标,填充的数据),返回void


四、数组排序

Arrays.sort

Arrays.sort(数组变量),返回void


五、数组二分查找

Arrays.binarySearch

Arrays.binarySearch(数组变量,查找的数据),返回数组里该数据的下标

用二分查找的方法查找数组中的目标数据的位置,返回数组里该数据的下标,如果没有该数据,返回一个负数,当然也可以指定它从指定范围位置进行查找:

Arrays.binarySearch(数组变量,数组变量的始下标,数组变量的末下标,查找的数据),返回数组里该数据的下标


六、数组相等判断

1.Arrays.equals

Arrays.equals(数组变量,数组变量),返回boolean值

2.数组变量.equal(另一数组变量)

比较数组对应相同下标数据是否相同,也可以用调用数组变量里的判断相等方法来判断

数组变量.equal(另一数组变量),返回boolean值

同为引用变量的字符串不是数组,它俩分开的,所以不能用数组工具Arrays.的方法应用于字符串变量,判断字符串相等可以用字符串变量.equals(字符串变量),调用字符串变量里自带的判断字符串相等方法

同样的,System.out.println(字符串变量的哈希值)Assarys.toString(数组变量的哈希值)将数组里的值转化为字符串,返回的是指向该字符串的字符串类型的哈希值字符串变量直接就用System.out.println直接打印的

;