Java——02——数组

一:认识数组

1.数组的默认初始化值

在这里插入图片描述

2.数组的内存结构

在这里插入图片描述数组S放在常量池中,static放在静态域中
比如:

 int arr=new int[] {
    
    1,2,3};

arr放入栈内存中,new出来的放入堆中,并且对应。
在这里插入图片描述

3.数组的声明

package com.xzx.contact;

public class ArrayTest {
    
    
  public static void main(String[] args) {
    
    
	  //1.一维数组的声明和初始化
	  //1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
	  int[] ids;//声明  声明数组的类型
	  ids=new int[]{
    
    1001,1002,1003,1004};//赋值
	  //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
	  String[] names=new String[5];
	  //总结:数组一旦初始化完成,其长度就确定了
	  
	  //2.如何调用数组的指定位置的元素:通过角标的方式调用
	  names[0]="张三";
	  names[1]="李四";
	  names[2]="李冰";
	  names[3]="李真";
	  names[4]="李永明";//charAt(0)是李
	  
	  //3.如何获得数组的长度 属性:length
	  System.out.println(names.length);
	  
	  //4.数组元素的默认初始化值
	     /*
	        数组元素是整型:0
	        数组元素是浮点型:0.0
	        数组元素是char型:0或'\u0000',而非'0'
	        数组元素是boolean型,false
	      */
     int[]arr=new int[1];
     for(int i=0;i<arr.length;i++) {
    
    
    	 System.out.println(arr[i]);
     }
  }
  
}

二:二维数组的使用

1.二维数组的定义

在这里插入图片描述

package com.xzx.contact;
@SuppressWarnings("unused")
public class  ArrayTest {
    
    
      public static void main(String[] args) {
    
    
    	  //1.二维数组的声明和初始化
    	  //要么给值要么就给大小,不能都写
    	  //1.1 静态初始化
    	  int[][] arr1=new int[][] {
    
    {
    
    1,2,3},{
    
    4,5},{
    
    6,7}};
    	  //1.2动态初始化
    	  String [][] arr2=new String[3][2];
    	  String [][] arr3=new String[3][];
    	  //2.如何调用数组的指定位置的元素
    	  System.out.println(arr1[0][1]);
    	  //3.获取数组的长度
    	  System.out.println(arr1.length);
    	  System.out.println(arr1[1].length);
    	  //4.遍历二维数组
    	  for(int i=0;i<arr1.length;i++) {
    
    
    		  for(int j=0;j<arr1[i].length;j++) {
    
    
    			  System.out.println(arr1[i][j]);
    		  }
    		  
    	  }
      }
    
  
 
}

2.二维数组的默认初始化值

在这里插入图片描述
在这里插入图片描述

3.二维数组的内存解析

在这里插入图片描述

三:数组例题

1.获取arr数组所有元素和

package com.xzx.contact;
@SuppressWarnings("unused")
public class  ArrayTest {
    
    
      public static void main(String[] args) {
    
    
    	  int [][]arr=new int[][] {
    
    {
    
    3,5,8},{
    
    12,9},{
    
    7,0,6,4}};
    	  int sum=0;
    	  for(int i=0;i<arr.length;i++) {
    
    
    		  for(int j=0;j<arr[i].length;j++) {
    
    
    			  sum+=arr[i][j];
    		  }
    	  }
    	  System.out.println(sum);
    	  
      }
  
 
}

2.数组中涉及到的常见算法题

在这里插入图片描述

1:数组的最大值

package com.xzx.contact;
@SuppressWarnings("unused")
public class  ArrayTest {
    
    
      public static void main(String[] args) {
    
    
    	int []arr=new int[10];
    	int maxValue=arr[0];
       for(int i=0;i<arr.length;i++) {
    
    
    	   arr[i]=(int)(Math.random()*(90)+10);
       }
       for(int i=1;i<arr.length;i++) {
    
    
    	   if(arr[i]>maxValue) {
    
    
    		   maxValue=arr[i];
    	   }
       }
       System.out.println(maxValue);
      }
  
 
}

2:数组的复制

package com.xzx.contact;
@SuppressWarnings("unused")
public class  ArrayTest {
    
    
      public static void main(String[] args) {
    
    
    	  String[] arr=new String[] {
    
    "a","b","c","d"};
    	  //数组的复制(区别于数组变量的赋值,arr1=arr)
    	  String []arr1=new String[arr.length];
    	  for(int i=0;i<arr1.length;i++) {
    
    
    		  arr1[i]=arr[i];
    	  }
    	  
      }
      
      
      
 
}

3.数组的查找

1.线性查找

package com.xzx.contact;
@SuppressWarnings("unused")
public class  ArrayTest {
    
    
      public static void main(String[] args) {
    
    
    	  String dest="a";
    	  boolean isFlag=true;
    	  String[] arr=new String[] {
    
    "a","b","c","d"};
    	 for(int i=0;i<arr.length;i++) {
    
    
    		 if(dest.equals(arr[i])) {
    
    
    			System.out.println("找到了指定的元素");
    			isFlag=false;
    			break;
    	 }
    	  }
    	 if(isFlag) {
    
    
        	 System.out.println("很遗憾,没有找到");
    	 }

    	  
      }
}

2.二分查找

前提:所要查找的数组必须有序

package com.xzx.contact;

@SuppressWarnings("unused")
public class ArrayTest {
    
    
	public static void main(String[] args) {
    
    
		int[] arr = new int[] {
    
     -55, -34, -30, -2, 1, 17, 25, 39 };
		int dest = 1;// 目标数
		int head = 0;// 初始的首索引
		int end = arr.length - 1;// 初始的末索引
		boolean isFlag = true;
		while (head <= end) {
    
    
			int middle = (head + end) / 2;
			if (dest == arr[middle]) {
    
    
				System.out.println("找到了,位置是" + middle);
				isFlag = false;
				break;
			} else if (dest < arr[middle]) {
    
    
				end = middle - 1;
			} else {
    
    
				head = middle + 1;
			}
		}
		if (isFlag) {
    
    
			System.out.println("很遗憾,没有找到");
		}

	}

}

4.数组的排序

1.冒泡排序

在这里插入图片描述

package com.xzx.contact;

@SuppressWarnings("unused")
public class ArrayTest {
    
    
	public static void main(String[] args) {
    
    
		// 每轮能把最大的数排在最后面,所以减1
		int[] arr = new int[] {
    
     55, 100, 4, 0, -6, 70, 11, 5 };
		for (int i = 0; i < arr.length - 1; i++) {
    
    
			for (int j = 0; j < arr.length - i - 1; j++) {
    
    
				if (arr[j] > arr[j + 1]) {
    
    
					int temp = arr[j + 1];
					arr[j + 1] = arr[j];
					arr[j] = temp;
				}
			}
		}
		for (int i = 0; i < arr.length; i++) {
    
    
			System.out.println(arr[i]);
		}

	}
}

四:Arrays工具类

在这里插入图片描述

package com.xzx.contact;

import java.util.Arrays;

@SuppressWarnings("unused")
public class ArrayTest {
    
    
	public static void main(String[] args) {
    
    
		//1.判断数组相等
		int []arr1=new int[] {
    
    1,2,3,4};
		int [] arr2=new int[] {
    
    1,3,2,4};
		boolean isEquals=Arrays.equals(arr1,arr2);
        System.out.println(isEquals);
        
        //2.输出数组信息
        System.out.println(Arrays.toString(arr1));
        
        //3.指定值填充到数组中  全替换成括号里的数
        Arrays.fill(arr1, 10);
        System.out.println(Arrays.toString(arr1));
        
        //4.排序
        Arrays.sort(arr2);
        System.out.println(Arrays.toString(arr2));
        
        //5.二分查找  元素得有序
        int []arr3=new int[] {
    
    -1,0,1,5,10,100};
        int index=Arrays.binarySearch(arr3,0);
        if(index>0) {
    
    
        	 System.out.println(index);
        }else {
    
    
        	System.out.println("未找到");
        }
        }
}

五:数组中的常见异常

在这里插入图片描述

六:自定义数组的工具类

简单举例:代码不完整
工具class ArrayUtil.java

package com.xzx.contact;

public class ArrayUtil {
    
    
	//求数组最大值
		public int getMax(int [] arr) {
    
    
			return 0;
		}
		//求数组最小值
		public int getMin(int []arr) {
    
    
			return 0;
		}
		//求数组的平均值
		public int getAvg(int [] arr) {
    
    
			return 0;
		}
		//反转数组
		public void reverse(int[] arr) {
    
    }
		//复制数组
		public int[] copy(int []arr) {
    
    
			return null;
		}
		//数组排序
		public void sort(int []arr) {
    
    
			
		}
		//遍历数组
		public void print(int []arr) {
    
    
			
		}
		//查找指定元素
		public int getIndex(int []arr,int dest) {
    
    
			return 0;
		}
}

ArrayTest.java

package com.xzx.contact;

@SuppressWarnings("unused")
public class ArrayTest {
    
    
	public static void main(String[] args) {
    
    
		ArrayUtil util=new ArrayUtil();
		int[] arr=new int[] {
    
    1,2,3,4,5,6,7};
		int max=util.getMax(arr);
		
	}
}

猜你喜欢

转载自blog.csdn.net/x1037490413/article/details/109154330