数组是一中引用数据类型,同一个数组中的元素需要时同一个数据类型,例如,如果有一个是int类型,数组中的所有变量都要是int类型 eg:【1,2,3,6,8,7,9】
数组的特点:
1.里面的元素按照线性排列,可以通过下标编号来访问数组中的每个元素
2.当一个数组被初始化之后,数组的大小便定了下来,即数组的长度不可再变
3.数组不仅可以存基本数据类型的数据,还可以存引用数据类型的数据,例如二维数组,只要里面 的数据类型相同就行
数组初始化的方式;
1.静态初始化:数组名称=new 数据类型[]{元素1,元素2,元素3......} eg:
arr1=new int[]{1,5,78,36,45,45,12}
还可以在声明时就初始化,eg;
int[] arr1={1,3,5,9,78,64,25,36,19}
2.动态初始化;数组名称=new 数据类型[数组长度] eg;
arr1=new int[5]
当动态初始化后未给数组传值,便会有默认值,根据数据类型的不同,默认值也不同;
访问数组时下标从0开始,所以最后一个数据的下表应该为arr1.length-1,我们通常使用遍历数组的方式来查看数组中的元素,遍历数组的常见方法有两种,for和foreach
for时通过下表来把数组每个都过一遍,foreach是通过把array里面的值一个一个赋值给variableName来把其全部过一遍,二者皆可用,可根据需求来选择
数组常用的方法;
toString输出数组中的元素
equals 比较两个数组的长度以及对应位置上面的数值是否全部相等
sort 当数组中为数字时,会将数组中的数据进行从小到大的排序
copyof 顾名思义,它的功能是复制,将原数组中的元素全部复制到新的数组中,其中的两个参 数,array是原来的数组,newLength是新数组的长度,当新数组的长度比原来数组的长 度 长时,多出来的未进行传值的位置会自动用默认值填充,当新数组的长度小于原数组的 长度时,优先从前往后复制,后面的数据将丢失,在进行数组扩容时经常使用到
内存中的数组;
当我们对int变量赋值时,x=1,y=x,那么y的值就等于1,我们再进行操作时;x=1,y=x,x=2,此时我们发现y的值还是1,那么数组是否是这样的呢,答案是否定的,
例如数组arr1,当我们创建arr1时,便获得一个空间地址0x11,当初始化它时,又会创建一个空间地址,此时0x11便指向了这个地址,当arr2=arr1之后,arr2的空间地址便和arr1的一样,此时他们共同指向同一个地址,此时,我们无论对这两个数组之中的哪一个数组进行操作,他们指向的地址中的元素都会发生变化,也就是他们之中的值都会变化,如运行以下代码,
arr2[1]=66
则地址中的元素便成为了[10,66,30,40,50],我们发现arr1[1]的值也变成了66
多维数组;
二维数组的声明和一维数组的差不多,注意动态初始化的时候,在两个[]内要分别写上外层数组的元素个数,内层数组的元素个数,本质上还是一维数组,只是里面的基本数据类型变成了数组
冒泡排序;
数组中的一个经典业务问题,冒泡排序
我们知道,通过sort方法可以将数据从小到大排列,那么从大到小排列要怎么做呢,冒泡排序为我们提供了一种解决问题的思路;
每一轮让相邻的数据两两相比,大的数移到后面,以此类推,逻辑
public static void main(String[] args) {
int[] arr={16,8,2,7,5,3,4,65,18,42,59,61,28,37}
int temp=o;
for(i=0,i<arr.length-1,i++){
for(j=0,j<arr.length-i-1,j++){
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp
}
}
}
代码如下