java中数组的特点?数组的声明和初始化方法和简单变量有什么不同?

Python08

java中数组的特点?数组的声明和初始化方法和简单变量有什么不同?,第1张

java语言中,数组是一种最简单的复合数据类型。数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。

★ 一维数组

1. 一维数组的定义

type arrayName[ ];

类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。

例如:

 int intArray[ ];

 Date dateArray[]

2.一维数组的初始化

◇ 静态初始化

int intArray[]={1,2,3,4}

String stringArray[]={"abc", "How", "you"}

◇ 动态初始化

  1)简单类型的数组

int intArray[]

intArray = new int[5]

 2)复合类型的数组

String stringArray[ ]

String stringArray = new String[3]/*为数组中每个元素开辟引用

  空间(32位) */

stringArray[0]= new String("How")//为第一个数组元素开辟空间

stringArray[1]= new String("are")//为第二个数组元素开辟空间

stringArray[2]= new String("you")// 为第三个数组元素开辟空间

3.一维数组元素的引用

数组元素的引用方式为:

 arrayName[index]

index为数组下标,它可以为整型常数或表达式,下标从0开始。每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。

★多维数组

Java语言中,多维数组被看作数组的数组。

1.二维数组的定义

type arrayName[ ][ ];

type [ ][ ]arrayName

2.二维数组的初始化

◇ 静态初始化

int intArray[ ][ ]={{1,2},{2,3},{3,4,5}}

Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。

◇ 动态初始化

1) 直接为每一维分配空间,格式如下:

arrayName = new type[arrayLength1][arrayLength2]

int a[ ][ ] = new int[2][3];

2) 从最高维开始,分别为每一维分配空间:

arrayName = new type[arrayLength1][ ]

arrayName[0] = new type[arrayLength20]

arrayName[1] = new type[arrayLength21]

arrayName[arrayLength1-1] = new type[arrayLength2n]

3) 例:

二维简单数据类型数组的动态初始化如下,

int a[ ][ ] = new int[2][ ];

a[0] = new int[3]

a[1] = new int[5]

对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。

而且,必须为每个数组元素单独分配空间。

例如:

String s[ ][ ] = new String[2][ ]

s[0]= new String[2]//为最高维分配引用空间

s[1]= new String[2]//为最高维分配引用空间

s[0][0]= new String("Good")// 为每个数组元素单独分配空间

s[0][1]= new String("Luck")// 为每个数组元素单独分配空间

s[1][0]= new String("to")// 为每个数组元素单独分配空间

s[1][1]= new String("You")// 为每个数组元素单独分配空间

3.二维数组元素的引用

对二维数组中的每个元素,引用方式为:arrayName[index1][index2]

例如: num[1][0]

4.二维数组举例:

【例2.2】两个矩阵相乘

public class MatrixMultiply{

 public static void main(String args[]){

 int i,j,k

 int a[][]=new int [2][3]//动态初始化一个二维数组

 int b[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}}//静态初始化

一个二维数组

 int c[][]=new int[2][4]//动态初始化一个二维数组

 for (i=0i<2i++)

 for (j=0j<3 j++)

a[i][j]=(i+1)*(j+2)

 for (i=0i<2i++){

 for (j=0j<4j++){

c[i][j]=0

 for(k=0k<3k++)

 c[i][j]+=a[i][k]*b[k][j]

}

 }

 System.out.println("*******Matrix C********")//打印Matrix C标记

 for(i=0i<2i++){

 for (j=0j<4j++)

System.out.println(c[i][j]+" ")

 System.out.println()

}

 }

 }

数组:是一组相关变量的集合数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组

数据的有点不使用数组定义100个整形变量:int i1int i2int i3

使用数组定义 int i[100]

数组定义:int i[100]只是一个伪代码,只是表示含义的

(1)一维数组

一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的,

使用java数组,必须经过两个步骤,声明数组和分配内存给该数组,

声明形式一

声明一维数组:数据类型 数组名[]=null

非配内存给数组:数组名=new 数据类型[长度]

声明形式二

声明一维数组:数据类型 [] 数组名=null

(2)java数据类型分为两大类

1.基本数据类型

int、long操作的时候本身就是具体的内容

引用数据类型:数组、类、接口

引用传递的就是一个内存的使用权,一块内存空间,可能有多个人同时使用

2.事例声明数组

数组的声明格式里,数据类型是数组元素的数据类型,常见的有整形、浮点型、与字符型等

数组名是用来统一这组相同数据类型元素的名称,其命名规则和变量的相同

数组声明后实际上是在栈内存中保存了此数组的名称,结下了是要在堆内存中配置数组所需要的内存,齐产固定是告诉编译器,所声明的数组要存放多少个元素,而new 则是命令编译器根据括号里的长度。

基本数据类型偶读有其默认值:int 0只要是引用数据类型默认值就是null事例

声明数组的同时分配内存空间

声明数组的同时非配内存

数据类型 数组名[]=new 数据类型[个数]

int score[]=new int[10]

声明一个元素个数为10的整形数组score,同时开辟依靠内存空间工期使用

java中,由于整形数据类型占用的空间为4个byte,而整个数组score可保存的元素有10个。所以上例中占用的内存共有4*10=40个字节

(3)数组的访问

数组中元素的表示方法

想要访问数组里的元素可以利用索引来完成,java的数组索引标号由10开始,以一个score[10]的整形数组为例,score[0]代表第一个元素

一直向下,最后一个为score[9]

(4)取得数组的长度

在java中取得数组的长度(也就是数组元素的长度)可以利用数组名称.length完成,

数组名称.length--返回一个int类型的数据

(5)数组的静态初始化

之前的数组,所采用的都是动态初始化,所有的内容在数组声明的时候并不具体的指定,而是以默认值的形式出现

静态初始化是指在数组声明后直接为数组指定具体的内容

如果想要直接在声明的时候给数组赋初始值,可以采用大括号完成,只要在数组的生命格式后面加上初值的赋值即可,

数据类型 数组名 []={初始值0,初始值1,初始值3,....初始值n}

范例排序,在操作中排序是比较常用的从大到小

这个时候不要被i值所迷惑   if(score[i]>score[j]){

这一步主要知识为了比较,实际上完成之后输出的时候是根据j的值排序的

(6)二维数组

二维数组声明的方式和以为数组的类似,内存分配也一样是用new这个关键字

其实声明与分配内存的格式如下

动态初始化

数据类型 数组名[][]

数组名=new 数据类型[行的个数][列的个数]

声明并初始化数组

数据类型 数组名[][]=new 数据类型[行的个数][列的个数]

静态初始化

(7)二维数组的存储

声明二维数组score 同时开辟一段内存空间

int score[][]=new int[4][3]

整体数据score可保存的元素是4*3=12个,在java中,int数据类型所占用的空间为4个字节,因此该整形数组占用的内存共为4*12=48个字节

事例

(8)二维数组静态初始化

用到的时候才会开辟空间,不用的(红色部分)则不开辟空间多维数组一般只是用到二维数组三维数组简单了解

public class intArray {

private int theSize

private int a_int[]

public intArray(int a[]){

this.a_int=a

this.theSize=a.length

}

public int getSize(){

return this.theSize

}

public int getAt(int nIndex){

return this.a_int[nIndex]

}

public void SetAt(int nIndex , int newElement){

this.a_int[nIndex] =newElement

}

public void add(int nIndex){

int old[]=this.a_int

this.a_int= new int[this.theSize+1]

for(int i =0i<old.lengthi++){

a_int[i]= old[i]

}

a_int[this.theSize+1]=nIndex

this.theSize++

}

public static void main(String args[]){

int a[]={3,42,52,22,44,55,11,23,7,1,2,86,64}

intArray array = new intArray(a)

for(int i = 0i<array.getSize()i++){

for(int j=ij<array.getSize()j++){

if(array.getAt(j) >array.getAt(i)){

int b_int = array.getAt(i)

array.SetAt(i, array.getAt(j))

array.SetAt(j, b_int)

}

}

}

for(int i = 0i<array.getSize()i++){

System.out.println(array.getAt(i))

}

}

}

JAVA写析构干嘛? 俺就不写了。