本系列博客汇总在这里: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'};//[]里不可以指定长度

三、数组的内存结构

  1. 在 java 中内存被分为栈和堆,他们都是一块内存空间。
    栈:容量小,存取速度快,适合存储生命周期短的数据,栈中存储变量(局部变量),特点:先进后出。
    堆:容量小,存取速度快,适合存储生命周期长的数据,堆适合存储对象。
  2. 栈里面存变量地址,此地址指向堆中,用的时候去堆里操作。
    Java系列(9)——数组_数据

四、求极值

  1. 遍历:把指定结构的数据全都访问一遍。
  2. 求极值的方法关键在于树立一个标志。
  3. 如下
    Java系列(9)——数组_二分查找_02

五、冒泡排序

  1. 冒泡排序的原理是将相邻的两个数逐个的作比较,如果前一个数比后一个数小,那么就交换过来,当一轮结束后最小的值一定产生在末尾。
    Java系列(9)——数组_二分查找_03

  2. 为什么有些情况下会出现,已经排好序列,但是还是会打印出来后面的趟数。原因是设计上实现的是打印 array. length-1 趟,由于目标组数的最大值没有在最后一位,所以在结果上会看到已经排序成功但还在打印的现象了。如果最大值在最后一位的话,就可以看到最大值从末尾一次一次的移到第一位的过程了。

  3. 示例

    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");
    }
    }
    }

    下图为最大值在最后一位所打印出的效果:
    Java系列(9)——数组_二分查找_04
    下图为最大值没有在最后一位所打印出的效果:
    Java系列(9)——数组_java_05

六、二分查找

  1. 二分查找针对​有序​的数组,效率很高。
  2. 二分查找的思想就是利用索引(数组下标)每次都找到排好序后的数组最中间的一个数,然后与需要查找的数进行比较,小于最中间的数,那么所要查找的数就在之前,相反,如果要查找的数大于最中间的数,那么索所要查找的数就在之后,然后再将最中间的数的索引做加一或者减一操作,加一操作时因为索要查找的数在之后,那么将中间数的索引加一后赋值给最小索引,这样,整个数组就相当于去掉了前半部分;减一操作思想相同。继续在新形成的数组里继续如上操作直到找到所要查找的值。
  3. 示例
  4. 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;
    }
    }
  5. Java系列(9)——数组_数组_06

七、数组的倒置

  1. 思想:执行交换数据操作,这样就实现了数组的倒置。
    Java系列(9)——数组_数据_07

  2. 本程序关键在于想到这种方法,然后利用两个数的交换方法来交换数据即可。
    Java系列(9)——数组_二分查找_08

八、二维数组

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();
}
}
}

Java系列(9)——数组_数据_09

如有错误,欢迎指正!