序
數組是很重要的數據結構,由同一類型相關的數據結構組成是靜態實體,有鏈 表,隊列,堆棧,數等數據結構,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 );
}
}
程序中:
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 ];
循環顯示
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.和其他語言的多維數組基本形式都一樣,在次不作分析。