您的位置:首页 > 编程语言 > Java开发

浅谈Java基础中的数组及其应用

2013-11-24 16:32 447 查看
大家都知道,在java中,我们可以使用变量来存放单个相关的数据,比如存放一个整数5,可以直接使用赋值语句 int a = 5这样就把5存放到变量a当中了。 那么不管在学习或者开发中我们遇到这样的情况:存放一连串的相关数据,显然,变量是不能够满足我们的这个要求。Java给我们一个好的解决方法--数组。

数组的定义

1. 数组的概念

数组是由一组相同类型的变量所组成的数据类型,以一个共同的名称表示,用标注来表示其存放的位置。简单点说,数组时痛一个类型数据的集合和容器。Java中需要使用new关键字来创建容器,在创建容器的时候要明确容器的大小,也就是说容器中存放的数据的个数。

统一的创建格式为:元素类型[] 数组名 = new 元素类型[元素的个数或数组的长度]。举一个例子,比如创建一个长度为3,元素类型为int的数组实体为:int[] arr = new int[3]。当创建数组给数组容器填塞数据的时候,可以直接赋值, 比如 int[] arr = {1,4,5,6,7,8}

2. 数组的内存图解

现在我们来看看,在java中,数组的内存是怎样分配的。java中内存划分为栈,堆,方法区,本地方法区,寄存器。在栈内存里存储的都是局部变量,一旦栈内存里的变量周期结束,该变量就会被释放。堆内存里存储的是实体对象,每一个实体都有一个首地址值,堆内存的变量都有默认初始化值。当实体不再被使用时,就会定期地被垃圾回收机制回收。下面我们通过一个简单的实例来分析一下,数组在java中的内存图解是怎么样的。

class ArryDemo{
public static void main (String() args){
int [] arr = new int[3];
arr = null;
}
}


这个例子当中,创建了一个int类型的数组,并且数组的长度为3,赋值数值为空值。



当程序执行main的时候,首先会在堆内存中开辟数组空间,并且为其分配内存地址0x786(假设的地址)。数组中各个空间都有默认的从0开始的角标,数组各个存储空间默认初始化为0。当数组创建结束的时候,把分配给数组的物理内存地址分配给 main函数中的引用变量arr,所以arr将通过0X786指向数组实体。程序继续执行,将null赋值给arr,所以arr不将指向堆内存中的数组实体。所以堆内存中的数组实体将成为垃圾,等待着垃圾回收器回收。

数组的应用

上面我们介绍了,Java中的数组时如何定义的,数组的声明,以及数组在内存中的解析图。接下来,我们浅谈数组在学习以及开发中的应用。

1. 遍历并且输出数组中的元素

在数组中,我们可以使用length来知道一个数组有多长,即这个数组中有多少个元素。然后我们再结合for循环可以吧数组遍历一下,依次输出数组中的每个元素。

class ArrayDemo
{
public static void main(String[] args)
{
int[] arr = {14,21,78,61,18};
System.out.println("数组中元素个数:"+arr.length);
for (int i=0;i<arr.length ;i++ )
{
System.out.println("arr["+i+"]="+arr[i]);
}
}
}


运行结果:

数组中元素个数:5

arr[0]=14

arr[1]=21

arr[2]=78

arr[3]=61

arr[4]=18

从上述代码,我们可以看出,arr.length可以知道数组的长度,知道数组的长度,使用for循环从下标0开始遍历arr数组,从而得到数组中每一个元素。

2. 数组的求和

从上面的案例我们可以用for循环遍历数组中每一个元素。那么同样的,在遍历的基础之上,我们可以把数组中的元素累加起来

class ArrayTest
{
public static void main(String[] args)
{
int[] arr = {23,14,22,88,45,90,17};
int sum = add(arr2);
System.out.println("sum="+sum);
}
public static int add(int[] arr)
{
//1,定义变量记录和。
int sum = 0;
//2,通过循环对数组进行遍历。
for(int x=0; x<arr.length; x++)
{
sum = sum + arr[x];
}
return sum;
}
}


在上述代码中, 我们创建了一个求和的方法add,然后在main函数里面,调用add函数算出数组arr的求和的结果。

3. 数组的排序

我们可以把班级每个同学的成绩存储在一个数组里面,那么我们有时候是不是有这个需求呢?就是把班级的成绩进行排名,这个时候我们就需要对数组里面的元素进行排序。接下来,我们浅谈数组中典型的排序方法,选择排序。首先我们给我们给出一个数组 int[] arr = {65,70,54,78,93,40}



数组在内存中的存放如上图所示, 下标的数字代表数组中的每个元素的下标。选择排序法,让每个元素和元素后面的其他元素进行比较,如果遇到小的元素就进行替换确保最前面的元素是最小的。首先arr[0]和arr[1]进行比较,以此类推arr[0]和arr[2],arr[3], arr[4], arr[5]进行比较,其中,我们遇到arr[2]比arr[0]小,所以 65 和 54 进行替换,arr[0]变成54,其次arr[0]比arr[5]54 大,所以,arr[0]和arr[5]进行替换。一轮比较结束,经过第一轮的比较我们得出这个数组的第一个元素变成整个数组中最小的。接下来再让arr[1]和它后面的元素进行比较,然后就可以得到第二小的元素arr[1],依次类推比较,我们可以得到一个从小到大的排列的数组。下面我们就把这个排序的思想用代码表现出来。

class SelectSort
{
public static void main (String[] agrs){
int[] arr = {65,70,54,78,93,40}; /////声明一个数组,并且赋初始值
print(arr);                               /////打印初始的数组
select(arr);                              ///////调用方法对数组进行排序
print(arr);                               ///////打印排序后的数组

}
/*
功能实现:用选择排序法,对一个数组进行排序
*/
public static void select(int[] arr){
for (int i = 0;i<arr.length;i++)
{
for (int j = i+1;j<arr.length;j++ )
{
if (arr[i]>arr[j])
{
int temp;              /////定义一个中间变量来进行替换元素
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
/*包装一个print方法,用于打印数组*/
public static void print(int[] arr){
for (int i = 0;i< arr.length;i++ )
{
/*
打印数组中的元素,并且用“,”隔开
*/
if (i != arr.length-1)
{
System.out.print(arr[i]+",");
}else
System.out.println(arr[i]);
}
}
}


运行的结果为:



好了!我们简单的介绍了Java基础中的数组的概念,以及数组的一些简单的应用包括遍历,求和和排序,在排序当中,还有其他的排序,包括冒泡排序,希尔排序等等,这里就不一一介绍了。对于数组还有其他的一些应用技巧可以参考来自http://www.programcreek.com/2013/09/top-10-methods-for-java-arrays/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: