目录
数组基本用法
数组定义
存储一组相同数据类型的数据的集合。
数组的创建
- 法1:
int[] array={1,2,3,4,5,6};【虽然没写new,但实际上是一个对象】
🔴 注:定义数组的时候,不能写具体的数字。例如:int[3] array={1,2,3};
- 法2:
int[] array=net int[3];
//new 是关键字,实例化一个对象。意味着:Java中的数组是一个对象。
- 法3:
int[] arr=new int[]}{1,2,3,4,5};
数组的使用
- 获取长度
int[] array={1,2,3,4,5};
System.out.println(array.length);
- 访问数组中的元素
int[] arr={1,2,3,4,5,6};
System.out.println(arr[0]);//1
System.out.println(arr[1]);//2
arr[1]=99;
System.out.println(arr[1]);//99
注:(1)使用array.length能够获得数组的长度。
(2)使用 [] 按下标取数组元素,需备注下标从0开始。
(3)使用 [] 操作既能读取出数据,又能修改数据。
(4)下标访问操作不能超出有效范围[0—array.length-1].若超出,会下标越界异常。
数组的遍历
- for 循环遍历
int[] array={1,2,3,4,5};
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
System.out.println();
- for each 增强 for 循环
int[] array={1,2,3,4,5};
for (int x:array){
System.out.print(x+" ");
}
System.out.println();
💌 for循环和for each 的区别:
for循环可以拿到下标,for each 拿不到下标。
- 使用Java的操作数组的工具类Arrays.toString将数组以字符串的形式输出。(使用时要导包)
int[] arr={1,2,4,5,6,7};
String ret=Arrays.toString(arr);
System.out.print(ret);
//或者 System.out.print(Arrays.toString(arr));
数组作为方法的参数
int[] arr={1,2,3,4};
打印数组内容
public static void printf(int[] array){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
public static void main(String[] args){
int[] array={1,2,3,4,5};
printf(array);
}
经典例题分析
public static void func1(int[] array){
array=new int[]{11,2,13,4,51,61};
}
public static void func2(int[] array){
array[0]=899;
}
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
System.out.ptintln(Arrays.toString(array));//[1,2,3,4,5,6]
func1(array);
System.out.ptintln(Arrays.toString(array));[1,2,3,4,5,6]
func2(array);
System.out.ptintln(Arrays.toString(array));//[899,2,3,4,5,6]
}
🎁🎁 备注:int[] array1={1,2,3,4,5};
int[] array2=array1;
代表array2这个引用指向array1这个引用指向的对象。
数组作为方法的返回值
写一个方法,将数组中的元素都乘2.
//在原数组上进行扩大
public static void func(int[] array){
for(int i=0;i<array.length;i++){
array[i]=2 * array[i];
}
}
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
func(array);
System.out.println(Arrays.toString(array));
}
数组扩大2倍,不影响原来的数组,放到新数组中
public static int[] func2(int[] array){
int[] ret=new int[array.length];
for(int i=0;i<array.length;i++){
ret[i]=2 * array[i];
}
return ret;
}
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
int[] ret2=func2(array);
System.out.println(Arrays.toString(ret2));
}
实现自己的Arrays.toString
public static String myToString(int[] array){
if(array==null) {
return "null";
}
String str="[";
for (int i=0;i<array.length;i++){
str=str+array[i];
if(i!=array.length-1){
str=str+"";
}
}
str=str+"]";
return str;
}
public static void main(String[] args){
int[] array={1,2,3,4,5};
System.out.println(myToString(array));
}
代码示例
找数组中的最大元素
public static int findNum(int[] array){
if(array==null) return -1;
int max=array[0];
for(int i=0;i<array.length;i++){
if(max<array[i]){
max=array[i];
}
}
return max;
}
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
System.out.println(findNum(array));
}
求数组的平均值
public static double avg(int[] array){
int sum=0;
for(int x:array){
sum+=x;
}
return (double) sum/(double) array.lemgth;
}
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
System.out.println(avg(array));
}
数组中指定元素的查找
🎀 1. 顺序查找
public static int findNum(int[] array,int key){
for(int i=0;i<array.length;i++){
if(array[i]==key){
return i;
}
}
return -1;
}
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
System.out.println( findNum(array,4));
}
🎀 2. 二分查找
public static int binarySearch(int[] array,int key){
int left=0;
int right=array.length-1;
while(left<=right){
int mid=(left+rigth)/2;
if(array[mid]>key){
right=mid-1;
}else if(array[mid]<key){
left=mid+1;
}else {
return mid;
}
}
return -1;
}
public static void main(String[] args){
int[] array={1,2,3,4,5,8};
System.out.println( binarySearch(array,4));
}
🎀 3. 用Java自己的binarySearch
public static void main(String[] args) {
int[] arr={12,13,45,56,78,99};
System.out.println(Arrays.binarySearch(array,10));
}
检查数组的有序性。
给定一个整型数组,检查数组是否是有序的(升序)。
public static boolean func(int[] array){
for(int i=0;i<array.length-1;i++){
if(array[i]>array[i+1]){
return false;
}
}
return true;
}
public static void main(String[] args){
int[] array={11,12,13,14,15};
boolean flg=func(array);
System.out.println(flg);
}
数组排序(冒泡排序)。
给定一个数组,让数组升序(降序)排序。
思路:每次尝试找到当前排序区中最小(或最大的)元素,放到数组的最前面(或最后面)。
public static void bubbleSort(int[] array){
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-1-i;j++){
if(array[j]>array[j+i]){
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
}
public static void main(String[] args){
int[] array={11,2,3,14,15};
bubbleSort(array);
System.out.println(Arrays.toString(array));
}
//对上述代码的优化。
public static void bubbleSort(int[] array){
for(int i=0;i<array.length-1;i++){
boolean flg=false;
for(int j=0;j<array.length-1-i;j++){
if(array[j]>array[j+i]){
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
flg=true;
}
}
if(flg==false){
return;
}
}
}
public static void main(String[] args){
int[] array={11,2,3,14,15};
bubbleSort(array);
System.out.println(Arrays.toString(array));
}
用Arrays.sort排序。
public static void main(String[] args){
int[] array={11,2,3,1,15};
Arrays.sort(array);
System.out.println(Arrays.toString(array));
}
填充数组
public static void main(String[] args){
int[] array=new int[10];
Arrays.fill(array,199);
// Arrays.fill(array,2,6,100);
System.out.println(Arrays.toString(array));
}
数组逆序
public static void reverse(int[] array){
int i=0;
int j=array.length-1;
while(i<j){
while(i<j){
int tmp=array[i];
array[i]=array[j];
array[j]=tmp;
i++;
j--;
}
}
}
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
reverse(array);
System.out.println(Arrays.toString(array));
}
数组数字排列
给定一个整型数组,所有的偶数放到前半部分,将所有的奇数放到后半部分。
public static void func(int[] array){
int i=0;
int j=array.length-1;
while(i<j){
while(i<j && array[i] % 2==0){
i++;
}
while(i<j && array[j] % 2!=0){
j--:
}
int tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
func(array);
System.out.println(Arrays.toString(array));
}
创建数组,并赋初始值。
创建一个int类型的数组,元素个数为100,并把每个元素一次设置为1-100。
public static void main(String[] args){
int[] array=new int[100];
for(int i=0;i<array.length;i++){
array[i]=i+1;
}
System.out.println(Arrays.toString(array));
}
数组的拷贝
- for 循环进行拷贝
public static int[] copyArray(int[] array){
int[] copy=new int[array.length];
for(int i=0;i<array.length;i++){
copy[i]=array[i];
}
return copy;
}
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
int[] ret= copyArray(array);
System.out.println(Arrays.toString(ret));
}
- copyOf进行拷贝
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
int[] ret=Arrays.copyOf(array,array.length);//整体拷贝
System.out.println(Arrays.toString(ret));
}
- copyOfRange进行拷贝
public static void main(String[] args){
int[] array={1,2,3,4,5,6};
int[] ret=Arrays.copyOfRange(array,1,3);//局部拷贝
System.out.println(Arrays.toString(ret));
}
- arraycopy进行拷贝
public static void main(String[] args){
int[] array={1,2,3,4,5};
int[] copy=new int[array.length];
System.arraycopy(array,0,copy,0,array.length);
System.out.println(Arrays.toString(copy));
}
public static void main(String[] args){
int[] array={1,2,3,4,5};
int[] copy=array.clone();
System.out.println(Arrays.toString(copy));
}
二维数组
二维数组本质
二维数组本质上也就是一维数组,只不过每个元素又是一个维数组。
基本语法
int[][] array={{1,2,3},{4,5,6}};
int[][] array2=new int[][]{{1,2,3},{4,5,6}};
int[][] array3=new int[2][3];
打印数组内容
- 方法1:
public static void main(String[] args){
int[][] array={{1,2,3},{4,5,6}};
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
- 方法2:
public static void main(String[] args){
int[][] array={{1,2,3},{4,5,6}};
for(int[] ret:array){
for(int x:ret){
System.out.print(x+" ");
}
System.out.println();
}
}
- 方法3:
public static void main(String[] args){
int[][] array={{1,2,3},{4,5,6}};
System.out.println(Arrays.deepToString(array));
}
🚦🚦🚦
public static void main(String[] args){
int[][] array={{1,2},{3,4,5}};
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
不规则二维数组
int[][] array=new int[2][];
array2 [0]=new int[3];
array2 [1]=new int[2];
🎈🎈🎈🎈🎈🎈 原创不易,如有错误,欢迎评论区留言指正。🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡