数组的定义和使用

数组的定义和使用

本来应该继续写线程的总结,但是今天学了数组这一章,觉得很简单,就先把这章总结了吧,明天继续总结线程。数组这章课主要讲解了数组的定义、数组中的数组用法以及数组类常见方法。

一、数组的定义和作用

为什么需要数组呢,设想一下,如果我们需要给一个班级的每一个学生都录入成绩,正常来说就可以给每个学生创建变量,然后给他们赋值就行,但是这样做是不是很麻烦呀,需要创建好几十个变量,所以我们想简单的处理一下,就这样我们有了数组。

数组是一种数据类型,存储相同数据类型的一组数据。当我们声明一个变量时,就是在内存空间中开辟一块空间,而声明数组时,就是在内存中开辟一串连续的空间。

数据基本的概念上面已经说的差不多了,现在讲讲如何定义数组。定义数组有两种方式,分别是动态初始化和静态初始化。

动态初始化:初始化时只指明数组长度,初始值有系统分配。定义方法为:数据类型[] 数组名 = new 数组类型[长度]

静态初始化:声明数组的同时给他们赋值:数据类型[] 数组名 = new 数据类型{元素1,元素2,....};还有一种简化版:数据类型[] 数组名 = {元素1,元素2,....}

如何访问数组中的某个元素呢?格式是这样的:数组名[索引]

这节还剩最后一个重点,就是Java中的内存分配。程序在运行中,需要在内存中分配空间,为了提高运算效率,就对空间进行不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式,内存可以分为两类,分别是栈内存和堆内存。栈内存用来存储局部变量,局部变量在方法中定义,使用完毕,立即消失。堆内存用来存储new出来的内容。

数组初始化时,会为存储空间添加默认值:

整数:0

浮点数:0.0

布尔:false

字符:空字符

引用数据类型:null

下图为访问数组的过程,先在栈中找到地址,在通过地址到了堆内存,访问数据

二.数组的遍历

访问数组元素的时候,总不能一直用System这种一句一句输出,肯定要简化,示例代码如下

package com.huawei.array;

/*

* 遍历数组:获取数组中的每一个元素

*/

public class ArrayDemo2 {

public static void main(String[] args) {

int[] arr = {12,34,700,455};

//动态表示数组长度:数组名.length

for(int i = 0;i

System.out.println(arr[i]);

}

}

}

三.数组中的数组

数组中的数组的意思就是,现在有一个数组,数组中每一个元素还是一个数组,套娃!举个例子,现在有3个班级,每个班级有5名学生,那创建一个数组可以同时包含这两个信息该怎么创建呢?想象一下,现在有一个数组,他有3个元素,对应的是3个班级,每个班级又是一个长度为5数组,包含一个班级的每名同学,这样一个数组中的数组就创建好了。代码如下:

/*

* 数组中的数组

*/

public class ArrayDemo3 {

public static void main(String[] args) {

// TODO Auto-generated method stub

int[][] array = new int[3][5];

array[0][0] = 95;

array[1][0] = 67;

array[2][0] = 78;

//遍历一班学生的成绩

for(int i=0;i

System.out.println(array[0][i]);

}

//遍历所有学生的成绩

for(int i=0;i

for(int j=0;j

System.out.println(array[i][j]);

}

}

}

}

数组中的数组内存图如下

四.数组的排序

这节排序主要是介绍冒泡排序。冒泡排序简单来说就是进行多轮比较,通过多轮比较将原数组进行排列,从大到小或者从小到大都行。如从小到大,第一轮找到数组的最大值放在数组的最后一位固定不动,比较次数是总元素-1。第二轮比较是将剩余的所有元素进行排序,再找到一个最大值,放在倒数第二位固定不动,比较次数为总元素-2,以此类推。可以总结一下,比较的轮数是总元素数-1,每一轮比较次数是总元素数-轮数。下图为冒泡排序示意图。

代码如下:

/*

* 冒泡排序

*/

public class ArrayDemo4 {

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] array = {12,34,11,24,56};

for(int i = 1;i

for(int j = 0;j

//每一轮比较的次数

//从小到大

if(array[j]>array[j+1]) {

int t = array[j+1];

array[j+1] = array[j];

array[j] = t;

}

}

}

for(int i = 0;i

System.out.println(array[i]);

}

}

}

五.数组的最大、最小、过滤重复

现在给你一个数组,那如何找到数组的最大值、最小值以及去除数组中的重复元素呢?现在我们一个一个来介绍

先介绍如何找最大值,思路就是先创建一个最大值变量,然后假设第一个元素就是最大值,之后用它和后面的元素进行比较,如果有比他大的,就把该元素存储到最大值变量中,代码如下:

/*

* 找最大值

*/

public class ArrayDemo5 {

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] array = {12,3,34,56,78};

int max = array[0];

for(int i=0;i

if(array[i]

max = array[i+1];

}

}

System.out.println(max);

}

}

接下来介绍如何找最小值,和找最大值一样,直接上代码:

/*

* 找最小值

*/

public class ArrayDemo6 {

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] array = {12,3,34,56,78};

int min = array[0];

for(int i=0;i

if(array[i]>array[i+1]) {

min = array[i+1];

}

}

System.out.println(min);

}

}

最后讲一下如何去除数组中的重复数据。这个过程是这样的,要个每个元素一个标记,boolean类型的标记,然后将每个袁旭和其他元素相比较,如果重复,那就将其标记改变,最后将没有改变标记的元素放入一个新的数组,并统计个数。最终将新的数组复制到另一个数组中。

这里额外提一个方法,复制数组的方法,System.arraycopy()

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

src:原始数组

srcPos:原始数组起始位置

dest:目标数组

destPos:目标数组起始位置

length:要复制的数组元素的数量

代码如下:

/*

* 过滤重复

*/

public class ArrayDemo7 {

public static void main(String[] args) {

int[] array = {12,12,34,56,56,78};

int[] array1 = new int[array.length];

int t = 0;//新的数组个数

for(int i = 0;i

boolean flag = true;

for(int j=i+1;j

if(array[i]==array[j]) {//发现重复就改变flag,跳出循环

flag = false;

break;//有一个重复之后就不用比了

}

}

if(flag==true) {//判断标记是否被改变,没被改变就放入新的数组

array1[t] = array[i];

t++;

}

}

for(int i = 0;i

System.out.println(array1[i]);

}//这样输出会有0,不想要0

int[] newArray = new int[t];

System.arraycopy(array1, 0, newArray, 0, t);//复制数组

for(int i = 0;i

System.out.println(newArray[i]);

}

}

}

六.数组的系统类Arrays

方法名

说明

public static void toString(int[] a)

可返回指定数组的内容的字符串表示形式

public static void sort(int[] a)

按照数组从小到大排序,可以不用冒泡排序了

public static long[] copyOf(long[] original,int newLength)

复制指定数组,original:要复制的数组 newLength:新数组的长度

这些方法都是Arrays类的静态方法,要调用的话就是类名.方法名就行了

代码示例如下:

import java.util.Arrays;

public class ArrayDemo8 {

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] array = {12,3,4,1,56};

System.out.println(Arrays.toString(array));

//排序

Arrays.sort(array);

System.out.println(Arrays.toString(array));//从小到大排序,省略了冒牌排序

int[] newTemp = Arrays.copyOf(array, 6);//复制数组

newTemp[5] = 10;//给最后一个元素复制

System.out.println(Arrays.toString(newTemp));

array = Arrays.copyOf(array, 6);//这个方法有扩容的作用,要不然创建一个数组就无法改变它的长度了

array[5] = 111;

System.out.println(Arrays.toString(array));

}

}

七.总结

数组这一章就总结好了,这一章学完后我掌握了数组的创建和遍历方法、数组中的数组、冒泡排序、找到数组最大最小值、过滤重复值以及数组类方法等等。

相关推荐

第3763章 两种天使
365bet官网在线

第3763章 两种天使

07-03 👁️ 4070
阴茎龟头大的原因有哪些
365bet用网址

阴茎龟头大的原因有哪些

07-28 👁️ 3615
新西兰ktv市场规模和头部企业份额分析
365bet官网在线

新西兰ktv市场规模和头部企业份额分析

07-24 👁️ 1445