数组的存放方式:
在JVM虚拟机上,数组指针在栈上,值在堆上
一维数组初始化定义方式:
建立数组时,写数组里的值就不能给定数组长度,写数组长度就不能给数组初始化,编译器会将数组内容初始化为对应类的初始值;
int []array1=new int[6];
int [] array2=new int []{1,2,3,4,5,6};
int [] array3={1,2,3,4,5,6};
java中两大算法类库:
Arrays:数组的算法类库
Collections:集合的算法类库
array.length 数组长度
Array.fill(array1,100);初始化数组值
比较数组内容是否相等:Arrays.equals(array2,array3);
循环打印数组方式:
foreach
for循环 长度为Arrays.length
Array.toString(array3); 打印数组
Arrays.sort(array3);给数组从小到大排序
Arrays.binarySearch(array2,key);在有序数组中查找值 成功返回下标,失败返回1
函数的重载:
函数名可以相同,参数不同;
int类型的数组大小:
对象头:8字节
长度:4字节
32位JVM按8字节对齐
一维数组的复制方式:
int[] array1=new int[]{12,5,67,547,78};
//数组拷贝方法一:clone方法
int[] array2=array1.clone();
System.out.println(array1 + " " + array2);
//数组拷贝方式二:Arrays.copyof
int[] array3=Arrays.copyOf(array1,array1.length);
System.out.println(array1 + " " + array3);
//数组的拷贝方式三:System.arraycopy
int[] array4 =new int [array1.length]; System.arraycopy(array1,0,array4,0,array1.length);
System.out.println(array1 + " " + array4);
练习:
1.请把下面数组中的数字56全部删掉,并对数组array5进行缩容,打印最终的数组元素
2.随机0-100之间的整形元素100个放到数组中,请删除数组中所有重复的元素,只保留一个该重复数字即可,打印最终的数组
3.随机0-100之间的整形元素100个放到数组中,请在数组中所有能被5整除的元素前面添加数字0,打印最终的数组
import java.util.Arrays;
public class ArrayTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.请把下面数组中的数字56全部删掉,并对数组array5进行缩容,打印最终的数组元素
int[] array5 = new int[]{12,4,56,7,56,21,56,56,89,62,41,56};
for(int i=0;i<array5.length;i++){
if(array5[i] == 56){
System.arraycopy(array5,i+1,array5,i,array5.length-i-1);
i--;
array5=Arrays.copyOf(array5,array5.length-1);
}
}
System.out.println(Arrays.toString(array5));
//2.随机0-100之间的整形元素100个放到数组中,请删除数组中所有重复的元素,只保留一个该重复数字即可,打印最终的数组
int[] array1 = new int [100];
for(int i=0;i<array1.length;i++){
array1[i]=(int) (Math.random()*100);
}
System.out.println(Arrays.toString(array1));
for(int i=0;i<array1.length-1;i++){
for(int j=i+1;j<array1.length;j++){
if(array1[i]==array1[j])
{
System.arraycopy(array1,j+1,array1,j,array1.length-j-1);
j--;
array1=Arrays.copyOf(array1,array1.length-1);
}
}
}
for(int j=0;j<array1.length;j++){
System.out.printf("array1[%d]=%d",j,array1[j]);
System.out.println();
}
//3.随机0-100之间的整形元素100个放到数组中,请在数组中所有能被5整除的元素前面添加数字0,打印最终的数组
int[] array2 = new int [100];
for(int i=0;i<array2.length;i++){
array2[i]=(int) (Math.random()*100);
}
System.out.println(Arrays.toString(array2));
for(int i=0;i<array2.length;i++){
if(array2[i]%5 == 0){
array2=Arrays.copyOf(array2,array2.length+1);
System.arraycopy(array2,i,array2,i+1,array2.length-i-1);
array2[i]=0;
i++;
}
}
System.out.println(Arrays.toString(array2));
}