转---黑马程序员-Java学习笔记(数组)
数组
定义和初始化:
int[]x = new int[3];//x是数组类型,默认初始化为0(int), 0.0f, 0,0(double) ,false(bool)
x处于栈内存中
x = null;//x不指向数组,这时候如果数组没有其他指向值,会当成垃圾处理
数组在内存中的存储方式:

内存结构:
运行的时候才会开辟内存空间,(因此超出数组范围编译不会报错,运行时才会报错)
栈内存:数据使用完毕,会自动释放空间(局部变量)
堆内存:new int[2],数组和对象,每一个实体都有一个位置,(垃圾回收机制)
数组初始化:
1)int []arr = new int[]{1,2,3,4};
2)int [] arr = {1,2,3,4};
3)int[]arr= new int[5];
arr[0]=1;
arr[1]=2;
.......
对数组的一些操作:
/*
获取数组中的最大值
思路:
获取最值需要进行比较,每次比较都会有一个较大的值,因为该值不确定,需要一个变量进行存储.
让数组中的每一个元素都和这个变量中的值进行比较,如果大于变量中的值,就用该变量记录较大值
当所有元素都比较完成,那么该变量就是最大值
步骤:
定义变量,初始化为数组中任意一个元素
通过循环语句对数组进行遍历
在变量中定义判断条件,如果遍历到的元素比变量值大,就将其赋值给变量需要
需要定义一个功能来完成,以便提高复用性
明确结果,数组中的最大元素int
未知内容,:一个数组,int[]
*/
//计算数组最大值
int arr[] ={2,5,6,7,8,32,4,2,4,9,4,11,3,34};
int max = arr[0];
for(int i = 1;i<arr.length;i++)
{
if(arr[i] > max)
max = arr[i];
}
数组排序
-
选择排序,嵌套循环(比如5个元素的数组,arr[0]比较4次,arr[1]比较3次.......)
第一个元素和后面的所有元素对比,发现比他小的就替换值,一轮比完第一个元素就是最小值;
然后,第二个元素和后面的所有元素对比,发现比他小的就替换值,第二轮轮比完第二个元素就是第二个最小值;
……以此类推
原理如下图:
![]()
// int arr[] ={2,5,6,7,8,32,4,2,4,9,4,11,3,34};
//选择排序,数组第一个数跟后面所有相比,最小值放到最前,然后第二个数跟后面所有数相比,以此类推
for(int i=0;i<arr.length-1;i++)
{
for(int j=i+1;j<arr.length;j++)
{
int temp = arr[i];
if(temp > arr[j])//如果后面的元素比他小,就替换
{
arr[i] = arr[j];
arr[j] = temp;
}
}
}
-
冒泡排序:相邻两个元素进行比较,如果符合条件则换位;
第一轮,第一个元素和第二个元素比,如果比他小就替换,
第二个元素跟第三个比,如果比他小就替换…….全部对比完,则最后的元素即是最大值;
第二轮,去掉最后一个元素,前面的元素挨个对比,则对比完倒数第二个元素即是第二个最大值;
…….以此类推
原理如下:

//冒泡排序,相邻的两个元素比较,如果符合条件,则换位
for(int i=arr.length-1;i>0;i--) {
for(int j= 0;j<i;j++)
{
int temp = arr[j];
if(temp < arr[j+1])//挨个对比,满足条件换位
{
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
数组的查找:
-
顺序查找:
遍历数组,查找到需要的内容
-
折半查找:(数组必须是有序的)
//折半查找,数组必须是有序的
int[] arr = {3,5,8,44,47,51,57,59,72,77,79,82,84,97,101,204,304};
int num = 304;
int min = 0;
int max = arr.length-1;
int location = -1;
while(min <=max) //当最小角标>最大角标时,代表没有找到,退出while循环
{
int mid = (max+min)/2;
if(arr[mid] == num) //若找到,则直接退出循环
{
location = mid;
break;
}
else if(arr[mid] > num) //若中间值比寻找值大,说明在上半区
max = mid-1;
else if(arr[mid] < num) //若中间值比寻找值小,说明在下半区
min = mid+1;
}
二维数组:
普通定义:int [][]arr = new int[3][4];//每个组都是4个元素
特殊定义:int [][]arr = new int[3][]; //arr.length == 3
arr[0] = new int [3];//arr[0].length == 3
arr[1] = new int[2];//arr[1].length == 2
arr[2] = new int[4];//arr[2].length == 4
int[]x,y[];//x是一维数组,y是二维
相当于 int[]x;
int[] y[];
http://blog.163.com/ljj1219@126/blog/static/143633241201472925918508/


浙公网安备 33010602011771号