java基础之数组

一、数组的概念

  数组就是同一种类型数据的集合。简单的来说就是一个容器,用来装东西的。

        使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。

常见的数组有一维数组、二维数组。在java中,数组使用一种特殊的符号来表示:[]。


二、一维数组

定义格式:(1)数组中存储数据的类型  数组名[] = new  存储数据的类型[数组容器的大小];

例:int n = new int[10];

(2)数组中存储数据的类型 数组名[] = new 元素类型 [ ]{元素1,元素2,…};

例:int n = new int[]{1,2,3,4};

(3)数组中存储数据的类型 数组名[] = {元素1,元素2,…};--------第二种的简化方式

例:int n = {1,2,3,4};

定义数组时,要注意:(1)数组容器要使用关键字new来创建

(2)数组容器必须有一个固定的大小

数组的使用:java是利用角标(索引、下标、编号)来操作数组中的所存储的数据的。角标是从0开始,逐渐递增的(+1)。

数组内存图解:


java,对于内存区域的划分为5

1、 寄存器  

CPU关。

2、 本地方法   

和操作系统有关,可以通过操作调用底层的东西。

3、 栈      

存放临时数据(局部变量)     局部变量:就是定义在函数内的变量或参数

         栈中是可以运行函数的

        栈的特点:先进后出。

        栈中存放的数据都不会长久存储,会随着函数的出栈,局部变量也就消失了。

4、 堆      

堆中存放都是实体(在java,只要是使用new关键字创建的都是实体)

            堆的特点:(1)堆中的实体都具有一个默认的地址(内存分配的地址)

(2) 实体中存放的数据,都具有默认值

intshortbytelong类型的默认值:   0

floatdouble类型的默认值:0.0

char 类型的默认值:’\u0000’

boolean类型的默认值:false

String类型的默认值:null

5方法区  也称为静态区。用来存放classstatic


三、数组的常见问题

1、角标越界(ArrayIndexOutOfBoundsException)    

 在通过角标来操作数组时,角标不存在的情况,就属于角标越界。

  例:int[] arr = new int[2];

              System.out.println(arr[3]);

            访问到了数组中的不存在的脚标时发生。

2空指针异常(NullPointerException) 

 当数组没有任何指向时(数组=null),又继续去操作数组,就产生空指针异常。

  例:int[]arr = null;

             System.out.println(arr[0]);

              arr引用没有指向实体,却在操作实体中的元素时。


四、二维数组

  格式1 int[][] a= new int[3][2];

        解释:以上格式表示定义了名称为a的二维数组。有3个一维数组,每一个一维数组中有2个元素。一维数组的名称分别为a[0],a[1],a[2] 给第一个一维数组1脚标位赋值为23写法是:a[0][1] = 23

        格式2 int[][] a= new int[3][];

          注:此种格式中每个一维数组都是默认初始化值null

          格式3int[][] arr = {{1,2,3},{4,5,6},{7,8,9,10}}; 每一个一维数组中具体元素都初始化了。

注:一种特殊定义写法:int[]x,y[]; x是一维数组,y是二维数组。


五、数组常见操作

1、数组的二分查找(折半查找)

//通过二分查找在数组中找到给定的数
class TwoSearch
{
	public static void main(String[] args) 
	{
		int a[]={1,4,12,45,67,48};//有序数组
		int n=67;//需查找的元素
		int i=twoSearchKey(a,n);
		if(i!=-1)//判断返回值
			System.out.println(n+"在数组中的下标为:"+i);
		else
			System.out.println("查无此数!");
	}
	/*
		将一个有序数组(升序)从中间分为两个区间,判断给定的数在哪个区间
		再将找到的区间从中间一分为二,继续查找,以此类推。
	*/
	public static int twoSearchKey(int a[],int n){
		//定义三个整型变量,分别记录头角标、中间角标、尾角标
		int start=0;
		int mid=a.length/2;
		int end=a.length-1;
		while(n!=a[mid]){
			if(n<a[mid]){
				end=mid-1;//修改尾角标
				mid=(start+end)/2;
			}else if(n>a[mid]){
				start=mid+1;//修改头角标
				mid=(start+end)/2;
			}else
				return -1;
		}
		return mid;
	}
}

输出结果为:



2、数组的冒泡排序

//对一个无序数组进行冒泡排序
class ArraySortDemo 
{
	public static void main(String[] args) 
	{
		int num[]={32,4,12,432,523,1,2,45};
		//for循环对数组进行遍历
		for(int i=0;i<num.length;i++){
			//将最小的数放到数组的最后一位
			for(int j=0;j<num.length-1-i;j++){
				//互换方法
				if(num[j]<num[j+1]){
					int temp=num[j];
					num[j]=num[j+1];
					num[j+1]=temp;
				}
			}
		}
		//通过循环输出排序后的数组
		for(int i=0;i<num.length;i++){
			System.out.print(num[i]+"\t");
		}
		
	}
}
输出结果为:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值