本文将从以下几个方面对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;
}
}
}
}
}
【未完待续】