Java入门需要了解(数组-八)

数组目录

  • 数组概念
  • 数组的好处
  • 数组的定义
  • 内存空间的划分
  • 数组操作
    • 选择排序
    • 冒泡排序
    • 数组查找
    • 二分查找
    • 数组操作(进制转换-十六进制,其他进制类似)
  • 二维数组
    • 二维数组格式1
    • 二维数组格式2:

数组概念

同一种类型数据的集合,数组就是一个容器

数组的好处

可以自动给数组中的元素从0开始编号,方便操作数组中的元素。

数组的定义

  • 格式1
元素类型[] 数组名= new 元素类型[元素个数];
实例: int[] arr=new int[5];
  • 格式2(定义的同时赋值)
元素类型[] 数组名 = new 元素类型[]{元素1,元素2,...};
int [] arr = new int[] {1,3,5,7,9};
int [] arr2 = {2,4,6,8};
  • 格式3
元素类型[] 数组名={元素1,元素2,...};
int[] arr={1,2,3,4};

内存空间的划分

JVM启动时,会默认划分五块区域的内存,这有点类似于,一个运动场,默认就有各种项目的运动区域一样

  • 寄存器:由CPU来处理
  • 本地方法区:所在系统相关的方法,在不同的操作系统中,调用不同系统中的内容
  • 方法区
  • 栈内存:存储的都是局部变量(定义在方法内的变量),变量所属的作用域一但结束,变量就自动释放(其操作非常快)

局部代码块,限定局部变量的生命周期

  • 堆内存:存储对象(凡是new出来的都存在堆中)

堆内存中的每个实体对象都有首地址值
堆内存中的变量都会进行默认初始化,不同的类型初始化的值不一样(eg:整数是0,boolean是false,float为0.0f)
堆内存中无用的对象,不会立刻释放,由JVM中的垃圾回收器定期回收。

数组操作

选择排序

public static void sortSelect(int[] arr){
		for(int i=0;i<arr.length-1;i++){
			for(int j=i+1;i<arr.length;j++){
				if(arr[i]>arr[j]){
					int temp=arr[i];
					arr[i]=arr[j];
					arr[j]=temp;
				}
			}
		}
	}

冒泡排序

public static void sortBubble1(int[] arr){
		//-1是防止访问越界
		for(int i=0;i<arr.length-1;i++){
			//-1是防止访问越界,-i是当外循环一次是,内循环减少最后一个的比较
			for(int j=0;j<arr.length-1-i;j++){
				if(arr[j]>arr[j+1]){
					int temp = arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}

public static void sortBubble2(int[] arr){
		//-1是防止访问越界
		for(int i=arr.length-1;i>=0;i--){
			for(int j=0;j<i;j++){
				if(arr[j]>arr[j+1]){
					int temp = arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}

数组查找

public static int getIndex(int[] arr,int key){
		for(int i=0;i<arr.length;i++){
			if(arr[i]==key){
				return i;
			}
		}
		return -1;
	}

二分查找

//查找的前提是一个已经排序的整数
public static int BinarySearch(int[] arr,int key){
		int min=0;//查找起始位置
		int max=arr.length-1;//查找结束位置
		int mid=(min+max)/2;//当前查找位置
		//int mid=(min+max)>>1;//左移一位跟除二是一样的效果
		while(arr[mid]!=key){
			if(key>arr[mid]){
				min=mid+1;
			}else if(key<arr[mid]){
				max=mid-1;
			}
			mid=(min+max)/2;
			//mid=(min+max)>>1;//左移一位跟除二是一样的效果
			if(max<min){
				return -1;
			}
		}
		return mid;
	}

数组操作(进制转换-十六进制,其他进制类似)

public static void toHex(int num){
		if(num==0){
			System.out.println("0");
			return ;
		}
		char[] charArr={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
		char[] hexArr = new char[8];
		int index = 8;
		while(num!=0){
			int temp =num&15;
			hexArr[--index]=charArr[temp];
			num=num>>>4;
		}
		for(int i=index;i<8;i++){
			System.out.print(hexArr[i]);
		}
	}

二维数组

二维数组格式1

  • int[][] arr=new int[3][2]

二维数组格式2:

  • int[][] arr=new int[3][];

你可能感兴趣的:(java学习分享记录,java,javase,编程语言)