数组基础以及常用操作

数组的概念:相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。

数组的4种定义格式:

         1、int[] arr = new int[];

         2、int[] arr = new int[];

         3、int[] arr = { };

        4、int[] arr = new int[]{ };

这里 推荐使用第三种,跟第一种。因为这两种最常用

数组初认识:

package com.laobi.day04;

public class Test6 {
	/**
	 * 数组:
	 * 1、数组的定义
	 * 2、数组的内存分配及特点
	 * 3、数组操作常见问题
	 * 4、数组常见操作
	 * 5、数组中的数组
	 * 
	 * 内存的划分:
	 * 1、寄存器
	 * 2、本地方法区
	 * 3、方法区
	 * 4、栈内存:
	 * 存储的都是局部变量,而且变量所属的作用域一旦结束,该变量就自动释放了
	 * 5、堆内存:
	 * 存储是数组和对象(其实数组就是对象)凡是new建立的都在堆中
	 * 特点:
	 * 1、每一个实体都用首地址值
	 * 2、对内存中的每一个变量都有默认初始化值,根据类型的不同而不同
	 * 3、垃圾回收机制
	 * 
	 * 常见问题:
	 * 1、数组下标越界
	 * 2、当引用型变量没有任何实体指向时,还在用其操作实体。就会发生该异常
	 */
	public static void main(String[] args) {
		int[] arr = new int[3];
		System.out.println(arr[2]);
	}

}
数组的常用操作:
package com.laobi.day08;

public class ArrayTool {
	
	/*
	 * 获取最大值的两种方法
	 */
	public static int getMax(int[] arr)
	{
		//使用数组中第一个元素记录住最大值
		int max = arr[0];
		//遍历数组
		for(int i=0;i<arr.length;i++)
		{
			//判断数组中的元素是否存在大于Max的值
			if(arr[i]>max)
				//如果有,就用Max记录这个元素的值
				max=arr[i];
		}
		return max;
	}
	
	public static int getMax_2(int[] arr)
	{
		//定义最大值下标为0第一个元素
		int maxIndex = 0;
		//遍历数组
		for(int i=0;i<arr.length;i++)
		{
			//判断数组的元素值是否大于这个最大值
			if(arr[i]>arr[maxIndex])
				//如果有,记录住该最大值下标
				i=maxIndex;
		}
		return arr[maxIndex];		
	}
	
	//选择排序
	public static void SelectSort(int[] arr)
	{
		//对数组下标进行遍历
		for(int i=0;i<arr.length-1;i++)
		{
			//对数组比较次数进行循环
			for(int j=i+1;j<arr.length;j++)
			{
				//判断当前数组元素的值是否大于其他元素的值
				if(arr[i]>arr[j])
				{
					//如果有,则进行交换,把交换方法封装成函数
					swap(arr,i,j);
				}
			}
		}
	}
	/*
	冒泡排序
	 * 两种方法
	 */
	//方法一:
	public static void Bubble(int[] arr)
	{
		for(int i=0;i<arr.length-1;i++)
		{
			//arr,length-1-i防止数组下标越界以及随着循环对次数增加循环对圈数减少
			for(int j=0;j<arr.length-1-i;j++)
			{
				if(arr[j]>arr[j+1])
					swap(arr,j,j+1);
			}
		}
	}
	//方法二:
	public static void Bubble_2(int[] arr)
	{
		for(int i=arr.length-1;i>0;i--)
		{
			for(int j=0;j<i;j++)
			{
				if(arr[j]>arr[j+1])
					swap(arr,j,j+1);
			}
		}
	}
	
	/*
	 * 数组的查找
	 */
	//查找方法
	public static int Search(int[] arr,int key)
	{
		for(int i=0;i<arr.length;i++)
		{
			if(arr[i]==key)
				return i;
		}
		return -1;
	}
	
	//二分查找
	public static int HalfSearch(int[] arr,int key)
	{
		//定义三个变量,记录第一个,中间和最后一个元素下标
		int min,mid,max;
		min = 0;
		max = arr.length;
		mid = (min+max)/2;
		//当最小下标不等于要查找的下标时,执行循环
		while(arr[mid]!=key)
		{
			//要找的元素大于中间的元素,返回最小下标是mid+1
			if(key>arr[mid])
				min=mid+1;
			//要找的元素小于中间的元素,返回最大下标是mid+1
			else if(key<arr[mid])
				max = mid-1;
			if(max<min)
				return -1;
			mid = (min+max)/2;
		}
		return mid;
	}
	
	//二分查找方法二:
	public static int HalfSearch_2(int[] arr,int key)
	{
		int min,mid,max;
		min=0;
		max=arr.length-1;
		while(min<max)
		{
			mid = (min+max)>>1;
		if(key>arr[mid])
			min = mid + 1;
		else if(key<arr[mid])
			max = mid -1;
		else
			return mid;
		}
		return min;
	}
	
    //把交换的方法封装成函数
	private static void swap(int[] arr, int i, int j) 
	{
		int temp = arr[i];
		arr[i]=arr[j];
		arr[j]=temp;
	}
	
	//处理数组打印的方法
	public static void print(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.println(arr[i]+"]");
		}
	}

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值