本文将从以下几个方面对Java数组进行总结:

一、数组的概念

二、数组的处理

三、数组的使用

数组的概念

数组的定义

数组是指一组数据的集合,其中每个数据称为元素.

一组数据:这一组数据类型必须是同一类

集合:数据的数量可以是任意个

数组的实质:

数组的实质是将一块大内存分均分为特定数量的小内存.(这块大内存也可以理解为连续的小内存)

数组的要素

数组类型

数组不能盛放任意类型的原因有下:

1.由于数组是分配的等大的连续内存块 如果类型不统一会出现内存浪费

2.数组的访问方式

既然数组也有int 类型 int数组是和int是同一类吗?当int数组作为参数如何传入方法或者类中呢?

数组长度

数组的长度是固定的,只有知道长度才能将一个大内存划分为小块

数组的使用

数组的语法格式

原汁原味java数组格式

public class Main {

    public static void main(String[] args) {
//        第一种声明数组的方式 == 声明数组长度 不赋值
        int[] myNumber = new int[18];
//        第二种方式  ==  声明数组的同时赋值
        int[] myNumbers= new int[]{1,2,3};
//        第三种方式 == 声明数组直接赋值 简写  
        int[] myN = {12,456};

    }
}

类C语言数组格式

public class Main {

    public static void main(String[] args) {
        int mylist[] = {1,2,3};
        System.out.println (mylist);

    }
}

二者效果相同,更多的是使用第一种方法声明数组. 

如何访问数组的元素呢?我们尝试最原始的方式==>sout 试试看能不能输出该数组:

System.out.println (myN);
System.out.println (myNumbers);
System.out.println (myNumber);

最后发现输出的结果是

[I@776ec8df
[I@4eec7777
[I@3b07d329

为什么不是我们数组的元素呢?我们该如何获取元素呢? 

直接输出数组 输出的是第一个元素 如果我们需要获取某个元素可以通过下标进行访问

 下标是从0开始 第一个元素对应的下标为0 最后一个下标对应的为长度-1

为什么是第一个元素 而不是其他任何一个元素呢?

回答这个问题首先需要知道为什么下标可以访问元素

一块大内存分为了n块连续的小内存,由于我们没有对小内存命名 所以通过名称访问的方式不太可行,那怎么办呢?通过地址访问?可在Java中地址是不可见的,我们也不知道地址是什么,但java知道这块地址的总长 知道分为了几份 只要我们将开头的地址确定 余下的几份通过他们之间的关系便能将他们解出来

计算公式:储存起始地址 = 原始地址 + 索引*字节

所以直接输出数组 输出的是数组第一个元素的地址

由上可知,java数组存储的是首位元素的地址,使用下标才能够访问对应元素的数据.

数组的遍历

通过角标能够访问数组中的元素 如果数组只有几个元素访问起来比较容易,但是如果有很多元素,我该怎么访问全部元素并将其打印呢?我们可以使用for方法遍历数组,打印全部元素

看看下面两种方法

public class Main {

    public static void main(String[] args) {
      int[] list = new int[80]; //声明一个数组
      createList (list); // 将数组传入方法 =>产生一个存放着1-80数字的数组
      //第一种方法 for while 都能实现 
      for (int i = 0;i<list.length;i++){
          System.out.println (list[i]);      

}

      //增强for
      for (int j : list){
            System.out.println (j);
            System.out.println (j);

        }
    }
    static void createList(int[] list){
        for (int i =0 ;i<list.length;i++){
        list[i] = i+1;
        }
    }
}

第一种方法原理是利用循环,创建一个局部变量i = 0,利用i<数组长度,为条件执行对应次数

第二种方法是直接将数组的元素依次赋值给 变量j 相当于python for循环

例如:

list = [i for i in range(1,81)]
for i in list:
    print(i)

数组的修改

如何对数组进行修改 增加或者删除呢?

由于普通的数组长度是一定的,故普通数组是无法进行增加或者删除的,但可以通过下标访问并进行修改。在修改时一般不用for-each进行修改,因为在for-each中的语句是重复执行的,比如下面这个例子

int[] list = {1,2,3}
for(int i : list){
    i = 0;
    System.Out.print(i);
}

输出的结果是:000 而不是 123.

数组的最值和排序问题

数组最经典最重要的一个问题就是排序和求最值.

//假设最值进行计算
public class Main {

    public static void main(String[] args) {
        int[] list = {7,2,3,4,5,6};
        int maxnum= list[0];
        for ( int j : list){
            if (j>maxnum){
             maxnum= j;
            }
        }
        System.out.println (maxnum);
    }
}

思考:如何求第二大值呢?

如果我要排序,该怎么进行呢?

 

//冒泡排序
public class Main {

    public static void main(String[] args) {
        // 冒泡排序
         int[] list = {4,9 ,12,33,6};
         for(int i = 1;i<list.length;i++){
             for(int j = 0;j< list.length-i;j++){
                 if (list[j]>list[j+1]){
                     int temp = list[j];
                     list[j] = list[j+1];
                     list[j+1] = temp;
                 }
             }
             }
        }
    }

【未完待续】