Java_关于数组的小结
1 数组的初始化(三种)
1.1 一维数组
数组在Java中是一个对象,属于引用类型,数组实例是使用new操作符创建的。
int[] array1 = new int[5];
int[] array2 = new int[]{1,2,3,4,5};
int[] array3 = {1,2,3,4,5};
1.2 二维数组
int[][] array4 = new int[3][3];
int[][] array5 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
int[][] array6 ={{1,2,3},{4,5},{7,8}};
2 数组的遍历打印(两种)
2.1 普通循环,例:for循环
for(int[] arr:array){
for(int val :arr){
System.out.println(val+" ");
}
}
2.2 for each方法
for(int i = 0;i<array.length;i++){
for(int j = 0;j<array[i].length;j++){
System.out.println(array[i][j]);
}
}
3 数组的拷贝(三种)
//方式一:clone方式
int[] arr1 = arr.clone();
//方式二:Arrays.copyof(可应用于缩容与扩容)
int[] array = Arrays.copyOf(arr, arr.length+2);
//方式三:System.arrayCopyof(提倡使用)
//此为native方法,直接运行在本地操作系统上,速度快
int[] arr3 = new int[arr.length];
System.arraycopy(arr1, 0, arr3, 0, arr.length);
4 常用的Arrays类
//1.toString() 打印数组
System.out.println(Arrays.toString(array));
System.out.println(Arrays.deepToString(array));//对二维数组打印
//2.sort() 数组内元素排序.
Arrays.sort(array);
//3.fill() 填充同一元素或复制同一引用.
Arrays.fill(array, 5);
//4.binarySearch();二分查找,找array中元素为3的下标
Arrays.binarySearch(array, 3);
//5.equals()
//比较基本数据类型,如果两个值相同,则结果为true
//而在比较引用时,如果引用指向内存中的同一对象,结果为true
Arrays.equals(array1, array2);//故此结果为false;
//6.binarySearch:数组元素的定位查找
//find的值为查询的数字在数组中的下标
int find;
find = Arrays.binarySearch(array,8);
5 数组的练习(扩容和缩容)
//1.请把下面数组中的数字56全部删掉,并对数组进行缩容,打印最终的数组元素
int[] array1 = new int[]{12,4,56,7,56,21,56,56,89,62,41};
int[] array2 = new int[array1.length];
int j = 0;
int num = 0;
for(int i = 0;i<array1.length;i++){
if(array1[i] != 56){
array2[j] = array1[i];
j++;
}
else{num++;}
}
int[] array3 = Arrays.copyOf(array2, array2.length-num);//缩容
System.out.println("原数组:"+Arrays.toString(array1));
System.out.println("删除指定元素:"+Arrays.toString(array2));
System.out.println("缩容:"+Arrays.toString(array3));
//2.随机0-100之间的整形元素100个放到数组中,请删除数组中所有重复的元素,只保留一个该重复数字即可,打印最终的数组
//(1)随机生成数组
int array4[] = new int[100];
for(int i = 0;i<100;i++){
array4[i] = (int)(Math.random()*100);
}
System.out.println("原数组:"+Arrays.toString(array4));
//(2)找出重复的数字并将其赋为111
int num1 = 0;
for(int i = 0;i<100;i++){
for(int m = i+1;m<array4.length-i-1;m++){
if(array4[i] == 111){break;}
else if(array4[i] == array4[m]){
array4[m] = 111;
num1++;
}
}
}
System.out.println("重复的替代:"+Arrays.toString(array4)+"\n"+"重复个数:"+num1);
//(3)按照第一道题的方法将111删除
int[] array5 = new int[array4.length];
int j1 = 0;
for(int i = 0;i<array4.length;i++){
if(array4[i] != 111){
array5[j1] = array4[i];
j1++;
}
}
int[] array6 = Arrays.copyOf(array5, array5.length-num1);
System.out.println("删除111:"+Arrays.toString(array5));
System.out.println("缩容:"+Arrays.toString(array6));
6 数组的应用(实现顺序栈)
class SqeStack{
private static final int NULL = 0;
private int[] stack;
private int top;
private boolean flase;
//开辟空间
public SqeStack(){
this(10);
}
public SqeStack(int size){
this.stack = new int[size];
top = 0;
}
//入栈
public void push(int val){
this.stack[this.top++] = val;
}
//出栈
public void pop(){
if (empty())
return;
this.top--;
}
//获取栈顶元素
public int top(){
return this.stack[this.top-1];
}
//判空
public boolean empty(){
return this.top == 0;
}
//判满
public boolean full(){
return this.top == this.stack.length;
}
//扩容2倍
public void resize(){
this.stack = Arrays.copyOf(this.stack, this.stack.length*2);
}
//打印
public void show(){
System.out.println(Arrays.toString(this.stack));
}
}