数组的定义与使用
1.动态初始化
数据类型[] 数组名称 = new 数据类型 [长度] ;
2.多个栈内存,指向同一个堆
总结:数组int[] x=null时,在栈上开辟了空间,当它x = new int[3] ;时,在堆上才开辟了空间
当temp=x时,是把本来栈上temp指向NULL的箭头指向了x所指向的堆的地址,这时,因为temp指向的是堆上的地址,修改temp[0],因为是通过地址修改,所以是有效的
public class ArrayDemo{
public static void main(String[] args) {
int[] x = null ;
int[] temp = null ; // 声明对象
x = new int[3] ;
System.out.println(x.length) ;
x[0] = 1 ; // 数组第一个元素
x[1] = 2 ; // 数组第二个元素
x[2] = 3 ; // 数组第三个元素
for (int i = 0; i<x.length ; i++) {
System.out.println(x[i]) ; // 通过循环控制索引下标更改
}
temp = x ; //如果要发生引用传递,不要出现[]
temp[0] = 55 ; // 修改数据
System.out.println(x[0]) ; //55
}
}
- 数组静态初始化
简化版:数据类型[] 数组名称 = {值,值,....};
完整版:数据类型[] 数组名称 = new 数据类型[] {值,值,....};
备注:以后使用静态方式定义数组的时候,请使用完整格式
4.二维数组
动态初始化:数据类型[][] 对象数组 = new 数据类型[行个数][列个数] ;
静态初始化:数据类型[][] 对象数组 = new 数据类型[][]{{值,值,..},{值,值,..},..};
5.方法接收数组
public class ArrayDemo{
public static void main(String[] args) {
int[] data = new int[] {1,2,3,4,5} ;
printArray(data) ; // 其效果等价于 int[] temp = data ;
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++)
{
System.out.println(temp[i]) ;
}
}
}
自我总结:觉得灰常没必要,直接可以调用data,主要是因为,在大的项目里,肯要重复使用,所以直接就把打印这个功能,变成一个方法,直接调用就OK了
6.方法返回数组
public class ArrayDemo{
public static void main(String[] args) {
int[] data = init() ;
printArray(data) ;
}
// 定义一个返回数组的方法
public static int[] init(){
return new int[] {1,2,3,4,5} ; // 匿名数组
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++)
{
System.out.println(temp[i]) ;
}
}
}
自我总结:我觉得这个返回经常用到,所以要超级注意了,
他的名字是public+static+数据类型[] 方法名(){return new 数据类型[]{数据}}
7.方法修改数组
public class ArrayDemo{
public static void main(String[] args) {
int[] data = init() ;
bigger(data) ;
printArray(data) ;
}
// 定义一个返回数组的方法
public static int[] init(){
return new int[] {1,2,3,4,5} ; // 匿名数组
}
// 将数组中每个元素的值扩大5倍
public static void bigger(int[] arr){
for (int i =0 ; i<arr.length ; i++) {
arr[i]*=5 ; // 每个元素扩大5倍
}
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++) {
System.out.println(temp[i]) ;
}
}
}
自我总结:用方法来修改数组,首先把方法单独拎出来,但是,还是在这个类里面,因为是利用地址修改,所以不需要返回值,直接修改完就OK,
所以修改数组的方法名是public static void +方法名(){}
8.数组的排序
已有写好的代码,可以直接使用:java.util.Arrays.sort(数组名);
自我总结:可以直接在所有代码之前加载 import java.util.Arrays.*;
9.数组里内容的拷贝
(1)数组部分拷贝
方法:(需要有两个数组)arraycopy
System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度);
例:
System.arraycopy(dataB,4,dataA,1,3) ;
目标数组A: 1、2、3、4、5、6、7、8、9
源数组B: 11、22、33、44、55、66、77、88、99
替换后: 1、55、 66、77、5、6、7、8、9
自我总结:这个拷贝方法,也是可以直接拿来使用的,但是对这种拷贝,需要有前提条件,首先要有两个数组,最终拷贝好的代码存在目标数组中。
(2)数组全部拷贝
数组拷贝: java.util.Arrays.copyOf(源数组名称,新数组长度) //
import java.util.Arrays;
public class fors {
public static void main(String[] args) {
int[] original = new int[]{1,3,5,7,9};
//开辟了10个空间,result是一个长度为10的数组
int[] result = Arrays.copyOf(original,10);
for (int temp : result) {
System.out.println(temp);
}
}
}
10.for的增强型
for(ElementType element:arrayName){};
//e.g:
int[] numArray = { 1, 2, 3, 4, 5, 6 };
for (int i : numArray) {
System.out.print(i);
}
//等价于
int[] numArray = {1,2,3,4,5,6};
for(int i=0;i<numArray.length;i++){
System.out.print(numArray[i]);
}
//或者来说,这样更贴切
int[] numArray = { 1, 2, 3, 4, 5, 6 };
for (int i=0; i < numArray.length; i++) {
int j = numArray[i];// 这个j,就等价与(1)中的i
System.out.println(j);
}
博主有言:这个是当初我复习数组记得笔记,稍微有点乱,就只稍微排版了一下更上来,等后期再次复习的时候,我把它继续完善