JAVA多維陣列的遍歷
陣列是程式語言中最常見的一種資料結構,可用於儲存多個資料,每個陣列元素存放一個資料,通常可通過陣列元素的索引來訪問陣列元素。
一旦陣列初始化完成,陣列在記憶體中所佔用的空間將被固定下來,因此陣列的長度將不可改變。
1定義陣列
Java支援兩種語法格式來定義陣列
type [] arrayName;
type arrayName [];
通常推薦第一種格式。
2陣列的初始化
(1)靜態初始化
顯式指定陣列每一個元素初始值,由系統決定陣列長度。
arrayName = new type[] { 1,2,3....}
(2)動態初始化
只指定陣列長度,由系統為陣列元素分配初始值。
arrayName = new type[length];
3陣列的使用
所有的陣列都提供了一個length屬性,通過這個屬性可以訪問到陣列的長度。所以我們可以通過for迴圈來逐一遍歷陣列元素
for( int i =0; i<arrayName.length; i++)
{
Syetem.out.printf("arrayName[i]");
}
4foreach迴圈
java5之後,java提供了一種更為簡單的迴圈,無需根據索引來訪問陣列元素,foreach迴圈自動遍歷陣列和集合的每個元素。
foreach迴圈的語法格式如下:
for( type variableName : array | collection)
{
//自動迭代訪問每個元素。。。
}
下面程式示範瞭如何使用foreach
public class ForEachTest
{
public static void main (String [] args)
{
string[] books = {"1","2","3"};
for( String book : books)
{
System.out.println(book);
}
}
}
上面的程式碼是一維陣列的例子。換句話說,陣列長度只能在一個方向上增長。很多時候我們需要陣列在多個維度上增長。這種陣列我們稱之為多維陣列。為簡單起見,我們將它稱為2維陣列。當我們需要一個矩陣或者X-Y座標系的時候,二維陣列是非常有用的。下面就是一個二維陣列的例子:
public class TheProblemOf2DArray {
private static final int ARR_SIZE=10;
public static void main(String[] args) {
int arr[][]=new int[ARR_SIZE][ARR_SIZE];
}
}
然而 在java中並沒有二維陣列,其實,當你定義一個二維陣列的時候 ,其實就是定義了一個一維陣列的陣列。這意味著,在上面的例子中,二維陣列是一個陣列的引用,其每一個元素都是另一個int陣列的引用。
不同的遍歷方式對效能的影響非常大 比如看下面的例子
package arrayTraverse;
/**
* 二維陣列的問題
*
* 我們在初始化一個任意大小的2維陣列。(為簡化分析我們使用二維方陣)我們將用兩種不同方式迭代同一個陣列,分析結果
* 兩種迭代方式的效能差距很大
* @author mohit
*
*/
public class TheProblemOf2DArray {
//陣列大小:陣列越大,效能差距越明顯
private static final int ARR_SIZE=9999;
public static void main(String[] args) {
//新陣列
int arr[][]=new int[ARR_SIZE][ARR_SIZE];
long currTime=System.currentTimeMillis();
colMajor(arr);
System.out.println("Total time in colMajor : "+(System.currentTimeMillis()-currTime)+" ms");
//新陣列,與arr完全相同
int arr1[][]=new int[ARR_SIZE][ARR_SIZE];
currTime=System.currentTimeMillis();
rowMajor(arr1); // this is the only difference in above
System.out.println("Total time in col : "+(System.currentTimeMillis()-currTime) +" ms");
}
/**
* 下面的程式碼按列為主遍歷陣列
* 即在掃描下一行之前先掃描完本行
*
*/
private static void colMajor(int arr[][]) {
for(int i=0;i<ARR_SIZE;i++){
for (int j=0;j<ARR_SIZE;j++){
//See this, we are traversing j first and then i
arr[i][j]=i+j;
}
}
}
/**
* 如果我們轉換內外迴圈
* 程式就以行為主順序遍歷陣列
* 即在掃描下一列之前先掃描完本列
* 這意味著我們訪問陣列時每次都在訪問不同的行(因此也在訪問不同的頁)
* 程式碼微小的改變將導致這個程式花費更多的時間完成遍歷
*/
private static void rowMajor(int arr[][]) {
for(int i=0;i<ARR_SIZE;i++){
for (int j=0;j<ARR_SIZE;j++){
/*看這個,我們先遍歷j,然後遍歷i,但是對於訪問元素來說
* 它們在更遠的位置,所以需要花費的更多
*/
arr[j][i]=i+j;
}
}
}
}
一行一行的遍歷要比列遍歷快得多。
相關文章
- Java 多維陣列遍歷詳解Java陣列
- java陣列遍歷的方法Java陣列
- jquery裡遍歷普通陣列和多維陣列的方法及例項jQuery陣列
- 23:二維陣列回形遍歷陣列
- 21:二維陣列右上左下遍歷陣列
- java陣列如何遍歷全部的元素Java陣列
- 陣列遍歷陣列
- c++遍歷陣列的多種方式C++陣列
- PHP二維關聯陣列的遍歷方式PHP陣列
- 陣列記憶體地址解讀及二維陣列的遍歷陣列記憶體
- php陣列中常用的多種遍歷方式PHP陣列
- 陣列遍歷方法陣列
- 遍歷陣列物件陣列物件
- php中使用while遍歷二維陣列的方法PHPWhile陣列
- 陣列的三種宣告方式總結、多維陣列的遍歷、Arrays類的常用方法總結陣列
- 物件和陣列的遍歷物件陣列
- js 遍歷陣列方式JS陣列
- Java基礎(四)——switch語句、一維陣列、二維陣列的定義、儲存、遍歷、常見問題Java陣列
- $.each()方法遍歷二維陣列程式碼例項陣列
- **PHP二維陣列遍歷時同時賦值PHP陣列賦值
- 遍歷陣列的幾種方法陣列
- Jvascript陣列迭代,遍歷的方法陣列
- 陣列常見的遍歷迴圈方法、陣列的迴圈遍歷的效率對比陣列
- php手冊 php陣列的遍歷有哪幾種方式?php陣列如何遍歷?PHP陣列
- JavaScript遍歷陣列詳解JavaScript陣列
- php陣列迴圈遍歷PHP陣列
- 多維陣列轉一維陣列(降維的多種方式)陣列
- php如何遍歷多維的stdClassObject物件,php的轉換成陣列的函式只能轉換外面一叢陣列PHPObject物件陣列函式
- JS中遍歷陣列、物件的方式JS陣列物件
- 遍歷PHP陣列的6種方式PHP陣列
- for in語句遍歷陣列中的元素陣列
- js如何遍歷陣列中的元素JS陣列
- ios 遍歷陣列的八種方法iOS陣列
- JavaScript 陣列遍歷方法的對比JavaScript陣列
- ***PHP遍歷陣列的方法foreachPHP陣列
- JS陣列遍歷和獲取陣列最值JS陣列
- 多維陣列陣列
- php 陣列遍歷奇怪現象PHP陣列