本系列博客汇总在这里:Java系列_汇总
目录
一、简介
所谓数组,是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。
二、数组定义语法格式
1、第一种定义方式
int[] arr = new int[5];
2、第二种定义方式
int[] arr = {56,56,56,56,56};
3、第三种定义方式
int[] arr = new int[]{'a','b','c','d','e'};//[]里不可以指定长度
三、数组的内存结构
- 在 java 中内存被分为栈和堆,他们都是一块内存空间。
栈:容量小,存取速度快,适合存储生命周期短的数据,栈中存储变量(局部变量),特点:先进后出。
堆:容量小,存取速度快,适合存储生命周期长的数据,堆适合存储对象。 - 栈里面存变量地址,此地址指向堆中,用的时候去堆里操作。
四、求极值
- 遍历:把指定结构的数据全都访问一遍。
- 求极值的方法关键在于树立一个标志。
- 如下
五、冒泡排序
冒泡排序的原理是将相邻的两个数逐个的作比较,如果前一个数比后一个数小,那么就交换过来,当一轮结束后最小的值一定产生在末尾。
为什么有些情况下会出现,已经排好序列,但是还是会打印出来后面的趟数。原因是设计上实现的是打印 array. length-1 趟,由于目标组数的最大值没有在最后一位,所以在结果上会看到已经排序成功但还在打印的现象了。如果最大值在最后一位的话,就可以看到最大值从末尾一次一次的移到第一位的过程了。
示例
public class Welcome
{
public static void main(String[] args)
{
int[] array = {3,38,5,44,50,15,36,26,27,2,46,4,19,47,48};
System.out.print("初始:\t");
printArray(array);
System.out.println();
oderArray(array);
}
//排序操作
public static void oderArray(int[] array)
{
for(int i=0;i < array.length; i++)
{
for(int j=0;j < array.length-i-1; j++)
{
if(array[j+1] > array[j])//将大于改为小于就是从小到大
{
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
if( j == array.length-i-1-1)
{
System.out.println();
System.out.print("第"+(i+1)+"趟\t");
printArray(array);
}
}
}
}
//输出
public static void printArray(int[] array)
{
for(int i=0;i<array.length;i++)
{
System.out.print(array[i]+"\t");
}
}
}下图为最大值在最后一位所打印出的效果:
下图为最大值没有在最后一位所打印出的效果:
六、二分查找
- 二分查找针对有序的数组,效率很高。
- 二分查找的思想就是利用索引(数组下标)每次都找到排好序后的数组最中间的一个数,然后与需要查找的数进行比较,小于最中间的数,那么所要查找的数就在之前,相反,如果要查找的数大于最中间的数,那么索所要查找的数就在之后,然后再将最中间的数的索引做加一或者减一操作,加一操作时因为索要查找的数在之后,那么将中间数的索引加一后赋值给最小索引,这样,整个数组就相当于去掉了前半部分;减一操作思想相同。继续在新形成的数组里继续如上操作直到找到所要查找的值。
- 示例
public class Welcome
{
public static void main(String[] args)
{
//注意:二分查找必须先排好序
int[] array = {1,2,3,4,5,6,7,8,9,25,55};
//查找数据 5
int result = findIndexBinary(array,5);
System.out.println("5 的索引是:"+result);
}
//操作过程
public static int findIndexBinary(int[] array,int num)
{
//定义最小索引
int minIndex = 0;
//定义最大索引
int maxIndex = array.length - 1;
//定义中间索引
int middIndex = (minIndex + maxIndex) / 2;
while(num != array[middIndex])
{
if(num > array[middIndex])
{
minIndex = middIndex + 1;
}
else
{
maxIndex = middIndex - 1;
}
middIndex = (minIndex + maxIndex) / 2;
}
return middIndex;
}
}
七、数组的倒置
思想:执行交换数据操作,这样就实现了数组的倒置。
本程序关键在于想到这种方法,然后利用两个数的交换方法来交换数据即可。
八、二维数组
1、第一种定义方式
int[][] array = new int[3][4];//第一维必须指定长度
2、第二种定义方式
int[][] array ={{1,1,1,1},{2,2,2,2},{3,3,3,3}};
3、示例
public class Welcome
{
public static void main(String[] args)
{
/*
//第一种定义方式
int[][] array = new int[3][4];
//第一行
array[0][0] = 1;
array[0][1] = 1;
array[0][2] = 1;
array[0][3] = 1;
//第二行
array[1][0] = 2;
array[1][1] = 2;
array[1][2] = 2;
array[1][3] = 2;
//第三行
array[2][0] = 3;
array[2][1] = 3;
array[2][2] = 3;
array[2][3] = 3;
*/
//第二种定义方式
int[][] array ={{1,1,1,1},{2,2,2,2},{3,3,3,3}};
printArray(array);
}
//输出
public static void printArray(int[][] array)
{
for(int i = 0;i < 3;i++)
{
for(int j = 0;j < 4;j++)
{
System.out.print(array[i][j]+"\t");
}
//换行
System.out.println();
}
}
}
如有错误,欢迎指正!