NO4.java学习笔记(数组、数组的操作【遍历、排序、查找】)

一、数组。

概念:同一种类型的数据的集合。其实数组就是一个容器。

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

格式:元素类型[]  数组名= new 元素类型[元素个数或者数组长度]  

示例:int[] arr = new int[5];  int 类型数组默认值:0   double默认值:0.0    float默认值:0.0f  boolean默认值为false

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

            int[] arr = {1,5,8,9,9};

            arr=null;  //可以视为垃圾,不会立刻被清除掉,而是在不定的时间被java的垃圾回收机回收。 

注:arr为数组类型  []代表数组

         arr代表数据的首地址

//编译只检查语法是否错误
//运行则会出错:
//操作数组时,方位到了数组中不存在的角标就会出现ArrayIndexOutOfBoundsException异常,数组角标越界。
int[] arr = new int[3];
System.out.println(arr[20]);

NullPointerException:空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。

  int[] arr = new int[3];
arr = null;
System.out.println(arr[2]);

二、内存结构。

java 程序运行时,需要在内存中的分配空间,为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据的方式和内存管理方式。

栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放

堆内存:数组和对象,通过new建立的实例都存放在堆内存中。

        每个实体都有内存地址值。

 实体中的变量都有默认初始化值。

                 实体不再被使用,会在不确定的时间内被垃圾回收器回收

方法区,本地方法区,寄存器。

三、数组的操作。

获取数组中的元素,通常会使用遍历。

int[] arr = new int[]{3,9,5};
for(int i=0; i<3; i++)
{
    System.out.println("arr["+i+"]="+arr[i]);
}
int[] arr = new int[]{3,9,5,44};
//数组中有一个属性可以直接获取到数组元素个数,length.
System.out.println(arr.length);
for(int i=0; i<arr.length; i++)
{
    System.out.println("arr["+i+"]="+arr[i]);
}
int[] arr = new int[]{3,6,5,1,8,9,67};
System.out.println(arr);

如显示结果为:[I@1542a75 

其中[:数组   I:int类型 @  @后面数字是由哈希值,十六进制的  数组实体的引用被打印了,其实就是数组内存存放地址

三、排序【选择和冒泡】

java中已经存在排序的函数和方法。

//(选择排序)通过中间值,排序数组,由小及大。

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

//冒泡排序:相邻的两个元素进行比较,由小及大。
//int[] arr = new int[]{3,1,4,2,7,5}; 
//arr.length=6 下标最大值为5.
public static void bubbleSort(int[] arr)
{
	for(int i=arr.length-1;i>=0;i--)
	//for(int i=0;i<arr.length;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 void printArray(int[] arr)
{
	System.out.print("[");
	for(int i=0;i<arr.length;i++)
	{
		if(i!=arr.length-1)
		   System.out.print(arr[i]+",");
		else 
		   System.out.print(arr[i]+"]");
	}
	System.out.println();
}

四、查找

/*
折半的第二种方式。
*/

public static int halfSearch_2(int[] arr,int key)
{
	int min = 0,max = arr.length-1,mid;
	while(min<=max)
	{
		mid=(min+max)/2;
		if(arr[mid]>key)
			min=mid+1;
		else if(arr[mid]<key)
		    max=mid-1;
		else
		    return mid;
	}
	return -1;
}
/*
折半查找:有序的数组。
*/
public static int halfSearch_1(int[] arr,int key)
{
	int min=0;
	int max=arr.length-1; //10-1=9;
	int mid=(min+max)/2;  //5
	if(key==arr[mid])
	{
		return mid;
	}
	else
	{
		while(key!=arr[mid])
		{
			if(key>arr[mid])
				min=mid+1;
			else if(key<arr[mid])
				max=mid-1;
			if(min>max)
				return -1;
			mid=(min+max)/2;
		}
	 return mid;
	 }
}
/*
顺序查找:
定义功能,获取key第一次出现在数组中的位置,如果返回是-1,则代表该key在数组中不存在。
*/

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值