数组在Java编程中的应用
副标题#e#
序
数组是很重要的数据布局,由同一范例相关的数据布局构成是静态实体,有链 表,行列,仓库,数等数据布局,java还提出了类数组的类vector。这些都是java数 据布局的构成部门,正如我们学过的c语言版的数据布局,java数据布局也是来描 述数据布局的只是描写语言是java一样罢了。
1.数组中最重要的是数组下标,数组下标及数组名是用来给会见者提供会见 数组的途径,数据下标从0开始,c[0],就是一个第一个数据第一个元素是c[i- 1],数组名的名名法则与变量沟通,其会见名目也很简朴。
例:c.lenth就是数组的长度。
c[a+b]+=2 就是个数组a+b的值+2,在此数组也有易夹杂的处所,那就是数组 的第7个元素和数组元素7是两个不沟通的观念,初学者必然要区分其区别。
2.空间分派:任何数据都要占用空间,数组也不破例,java顶用new来给一个 新的数组分派空间。
例:
int c[ ]=new int[12];
其名目等同于
int c[];
c=new int[12];
他们的初始化值都是0。
一个数组可以同时声明多个数组:
例:
string b[ ]=new String[100],x[ ]=new String[27];
数组可以声明任何数据范例,double string ..
举个例子来阐明:
// Fig. 7.5: InitArray.java
// initialize array n to the even integers from 2 to 20
import javax.swing.*;
public class InitArray {
public static void main( String args[] )
{
final int ARRAY_SIZE = 10;
int n[]; // reference to int array
String output = "";
n = new int[ ARRAY_SIZE ]; // allocate array
// Set the values in the array
for ( int i = 0; i < n.length; i++ )
n[ i ] = 2 + 2 * i;
output += "Subscript\tValue\n";
for ( int i = 0; i < n.length; i++ )
output += i + "\t" + n[ i ] + "\n";
JTextArea outputArea = new JTextArea( 11, 10 );
outputArea.setText( output );
JOptionPane.showMessageDialog( null, outputArea,
"Initializing to Even Numbers from 2 to 20",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}
#p#副标题#e#
措施中:
1.final int ARRAY_SIZE=10限定词final声明常数变量ARRAY_SIZE其值是10 。
2. n = new int[ ARRAY_SIZE ]声明白n数组其长度不能高出10
3.for ( int i = 0; i < n.length; i++ ) n[ i ] = 2 + 2 * i; 指定 了措施的要领即输出10个从2开始的偶数.其下标别离计为0-9的10个数。
4.output += "Subscript\tValue\n";
for ( int i = 0; i < n.length; i++ )
output += i + "\t" + n[ i ] + "\n"; 在output后头追加字符串.显示数 组下标即计较功效.
5 JTextArea outputArea = new JTextArea( 11, 10 );
outputArea.setText( output );
建设一个新的文本框,把output放入个中.
JOptionPane.showMessageDialog( null, outputArea,"Initializing to Even Numbers from 2 to 20",JOptionPane.INFORMATION_MESSAGE );
显示文本框.
由前3个进程你可以看到了数组是奈何成立的了.
3.引用及引用参数:很多编程语言都有通过值的挪用 callby value通报参数, 当利用挪用值时,将发生数值的一个拷贝并通报给被挪用的要领.
譬喻.
int hourly Temperatrue[ ]=new int[24];
modify Array(hourlyTemperatrue);
以一个例子说明:
// Fig. 7.10: PassArray.java
// Passing arrays and individual array elements to methods
import java.awt.Container;
import javax.swing.*;
public class ArrayPass extends JApplet {
JTextArea outputArea;
String output;
public void init()
{
outputArea = new JTextArea();
Container c = getContentPane();
c.add( outputArea );
int a[] = { 1, 2, 3, 4, 5 };
output = "Effects of passing entire " +
"array call-by-reference:\n" +
"The values of the original array are:\n";
for ( int i = 0; i < a.length; i++ )
output += " " + a[ i ];
modifyArray( a ); // array a passed call-by-reference
output += "\n\nThe values of the modified array are:\n";
for ( int i = 0; i < a.length; i++ )
output += " " + a[ i ];
output += "\n\nEffects of passing array " +
"element call-by-value:\n" +
"a[3] before modifyElement: " + a[ 3 ];
modifyElement( a[ 3 ] );
output += "\na[3] after modifyElement: " + a[ 3 ];
outputArea.setText( output );
}
public void modifyArray( int b[] )
{
for ( int j = 0; j < b.length; j++ )
b[ j ] *= 2;
}
public void modifyElement( int e )
{
e *= 2;
}
}
阐明:
1. outputArea = new JTextArea();
Container c = getContentPane();
c.add( outputArea ); 界说一个container用来输出功效.
2. int a[] = { 1, 2, 3, 4, 5 };界说数组a[]
3. output = "Effects of passing entire " +
array call-by-reference:\n" +
"The values of the original array are:\n";
在output字符串后追加标志
for ( int i = 0; i < a.length; i++ )
output += " " + a[ i ]; 在TextArea上输出a[i]为1,2,3,4,5
4. modifyArray( a ); // array a passed call-by-reference
引用参数
output += "\n\nThe values of the modified array are:\n";
追加字符
for ( int i = 0; i < a.length; i++ )
output += " " + a[ i ];
轮回显示
#p#分页标题#e#
output += "\n\nEffects of passing array " +
"element call-by-value:\n" +
"a[3] before modifyElement: " + a[ 3 ] 与返回类 团结
public void modifyArray( int b[] )
{
for ( int j = 0; j < b.length; j++ )
b[ j ] *= 2;
}
返回了计较后的a[]=b[j]*2 b[j]是姑且的 此处浮现callby value 数组b是 一个拷贝,计较竣事后通报给被挪用的要领,b在计较后自动销毁。
输出的功效是a[3] brefore modifyelment:8
5.modifyElement( a[ 3 ] );
output += "\na[3] after modifyElement: " + a[ 3 ];
outputArea.setText( output );与 进程团结
public void modifyElement( int e )
{
e *= 2;
}
返回了计较后的a[3]after modifyelment:8 e是姑且变量,运行后自动销毁。
5. 数组排序:排序使措施按某种顺序举办分列,升序或降序.这是计较机数据 处理惩罚中中应用最多的一项.譬喻银行的帐户排序,人为排序等.在次不作过多先容 。
6.数组查找:分线性插找和折半查找:对付小型的数组线性查找结果大概很好 ,对付大型数据效率就很低了,可以用折半查找,效率会很大的提高,折半查找 的要领是,譬喻查找含63个元素只需要较量6次巨细 第一次查找下标 (1+63)/2=32查找 若大于要害子,则到下标为1-32中查找,若小与要害子,则到 33-63中查找,若找不到,继承到下一个范畴中找,就是在将32分半,以上面的方 法以此类推,只道找到为止。
而查找的最多较量次数:满意2的k次方大于n的k次的最小整数值。由此可推 算对付10亿个数组来说用线性查找5亿次和用折半查找30次是何等大的差距。
7.和其他语言的多维数组根基形式都一样,在次不作阐明。