<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                {% raw %} # Java 數組 原文:http://zetcode.com/lang/java/arrays/ 在 Java 教程的這一部分中,我們將介紹數組。 數組是一個包含固定數量的單一類型值的容器對象。 創建數組時將確定數組的長度。 創建后,其長度是固定的。 標量變量一次只能容納一項。 數組可以容納多個項目。 這些項目稱為數組的元素。 數組存儲相同數據類型的數據。 每個元素都可以由索引引用。 數組從零開始。 第一個元素的索引為零。 ## Java 數組定義 數組用于存儲我們應用的數據。 我們聲明數組為某種數據類型。 我們指定它們的長度。 我們用數據初始化數組。 我們有幾種使用數組的方法。 我們可以修改元素,對其進行排序,復制或搜索。 ```java int[] ages; String[] names; float[] weights; ``` 我們有三個數組聲明。 該聲明包括兩部分:數組的類型和數組的名稱。 數組的類型具有確定數組中元素的類型(在我們的情況下為`int`,`String`和`float`)的數據類型,并帶有一對方括號`[]`。 方括號表示我們有一個數組。 集合具有類似數組的作用。 它們比數組更強大。 稍后將在單獨的章節中進行介紹。 ## Java 初始化數組 有幾種方法可以用 Java 初始化數組。 在第一個示例中,分兩個步驟創建和初始化一個數組。 `com/zetcode/InitArray.java` ```java package com.zetcode; import java.util.Arrays; public class InitArray { public static void main(String[] args) { int[] a = new int[5]; a[0] = 1; a[1] = 2; a[2] = 3; a[3] = 4; a[4] = 5; System.out.println(Arrays.toString(a)); } } ``` 我們創建并初始化一個數值數組。 數組的內容將打印到控制臺。 ```java int[] a = new int[5]; ``` 在這里,我們創建一個可以包含五個元素的數組。 該語句為五個整數分配內存。 方括號用于聲明數組,類型(在我們的示例中為`int`)告訴我們數組將保存哪種類型的值。 數組是一個對象,因此使用`new`關鍵字創建它。 ```java a[0] = 1; a[1] = 2; a[2] = 3; a[3] = 4; a[4] = 5; ``` 我們用一些數據初始化數組。 這是分配初始化。 索引在方括號中。 1 號將是數組的第一個元素,2 號是第二個,依此類推。 ```java System.out.println(Arrays.toString(a)); ``` `Arrays`類是一個幫助器類,其中包含用于操縱數組的各種方法。 `toString()`方法返回指定數組內容的字符串表示形式。 此方法有助于調試。 ```java $ java InitArray.java [1, 2, 3, 4, 5] ``` 這是`com.zetcode.InitArray`示例的輸出。 我們可以在一個語句中聲明并初始化一個數組。 `com/zetcode/InitArray2.java` ```java package com.zetcode; import java.util.Arrays; public class InitArray2 { public static void main(String[] args) { int[] a = new int[] { 2, 4, 5, 6, 7, 3, 2 }; System.out.println(Arrays.toString(a)); } } ``` 這是先前程序的修改版本。 ```java int[] array = new int[] { 2, 4, 5, 6, 7, 3, 2 }; ``` 一步創建并初始化一個數組。 元素在大括號中指定。 我們沒有指定數組的長度。 編譯器將為我們完成此任務。 通過僅指定大括號之間的數字,可以進一步簡化一步創建和初始化。 `com/zetcode/InitArray3.java` ```java package com.zetcode; import java.util.Arrays; public class InitArray3 { public static void main(String[] args) { int[] a = { 2, 4, 5, 6, 7, 3, 2 }; System.out.println(Arrays.toString(a)); } } ``` 整數數組是使用最簡單的數組創建方法創建的。 ```java int[] a = { 2, 4, 5, 6, 7, 3, 2 }; ``` `new int[]`構造可以省略。 該語句的右側是數組字面值表示法。 它類似于數組初始化的 C/C++ 樣式。 即使我們刪除`new`關鍵字,該數組的創建方式也與前兩個示例相同。 這只是一個方便的速記符號。 ## Java 數組訪問元素 創建數組后,可以通過其索引訪問其元素。 索引是放在數組名稱后面方括號內的數字。 `com/zetcode/AccessingElements.java` ```java package com.zetcode; public class AccessingElements { public static void main(String[] args) { String[] names = {"Jane", "Thomas", "Lucy", "David"}; System.out.println(names[0]); System.out.println(names[1]); System.out.println(names[2]); System.out.println(names[3]); } } ``` 在示例中,我們創建一個字符串名稱數組。 我們通過其索引訪問每個元素,并將它們打印到終端。 ```java String[] names = {"Jane", "Thomas", "Lucy", "David"}; ``` 將創建一個字符串數組。 ```java System.out.println(names[0]); System.out.println(names[1]); System.out.println(names[2]); System.out.println(names[3]); ``` 數組的每個元素都打印到控制臺。 在`names[0]`構造中,我們引用了名稱數組的第一個元素。 ```java $ java AccessingElements.java Jane Thomas Lucy David ``` 運行示例,我們得到上面的輸出。 可以更改數組的元素。 元素不是一成不變的。 `com/zetcode/AccessingElements2.java` ```java package com.zetcode; import java.util.Arrays; public class AccessingElements2 { public static void main(String[] args) { int[] vals = { 1, 2, 3 }; vals[0] *= 2; vals[1] *= 2; vals[2] *= 2; System.out.println(Arrays.toString(vals)); } } ``` 我們有一個由三個整數組成的數組。 每個值都將乘以 2。 ```java int[] vals = { 1, 2, 3 }; ``` 創建一個由三個整數組成的數組。 ```java vals[0] *= 2; vals[1] *= 2; vals[2] *= 2; ``` 使用元素訪問,我們將數組中的每個值乘以 2。 ```java $ java AccessingElements2.java [2, 4, 6] ``` 所有三個整數均已乘以數字 2。 ## Java 遍歷數組 我們經常需要遍歷數組的所有元素。 我們展示了兩種遍歷數組的常用方法。 `com/zetcode/TraversingArrays.java` ```java package com.zetcode; public class TraversingArrays { public static void main(String[] args) { String[] planets = { "Mercury", "Venus", "Mars", "Earth", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto" }; for (int i=0; i < planets.length; i++) { System.out.println(planets[i]); } for (String planet : planets) { System.out.println(planet); } } } ``` 將創建一個行星名稱數組。 我們使用`for`循環來打印所有值。 ```java for (int i=0; i < planets.length; i++) { System.out.println(planets[i]); } ``` 在此循環中,我們利用了可以從數組對象中獲取元素數量的事實。 元素數存儲在`length`常量中。 ```java for (String planet : planets) { System.out.println(planet); } ``` 遍歷數組或其他集合時,可以使用增強的`for`關鍵字使代碼更緊湊。 在每個循環中,將行星變量傳遞給行星數組中的下一個值。 ## Java 將數組傳遞給方法 在下一個示例中,我們將數組傳遞給方法。 `com/zetcode/PassingArrays.java` ```java package com.zetcode; import java.util.Arrays; public class PassingArray { public static void main(String[] args) { int[] a = { 3, 4, 5, 6, 7 }; int[] r = reverseArray(a); System.out.println(Arrays.toString(a)); System.out.println(Arrays.toString(r)); } private static int[] reverseArray(int[] b) { int[] c = new int[b.length]; for (int i=b.length-1, j=0; i>=0; i--, j++) { c[j] = b[i]; } return c; } } ``` 該示例重新排列數組的元素。 為此,創建了`reverseArray()`方法。 ```java private static int[] reverseArray(int[] b) { ``` `reverseArray()`方法將數組作為參數并返回一個數組。 該方法獲取傳遞的數組的副本。 ```java int[] c = new int[b.length]; ``` 在方法的主體內部,創建了一個新的數組; 它將包含新排序的元素。 ```java for (int i=b.length-1, j=0; i>=0; i--, j++) { c[j] = b[i]; } ``` 在此`for`循環中,我們用復制的數組的元素填充新數組。 元素是相反的。 ```java return c; ``` 新形成的數組將返回給調用方。 ```java System.out.println(Arrays.toString(a)); System.out.println(Arrays.toString(r)); ``` 我們打印原始數組和反轉數組的元素。 ```java $ java PassingArray.java [3, 4, 5, 6, 7] [7, 6, 5, 4, 3] ``` 這是示例的輸出。 ## Java 多維數組 到目前為止,我們一直在處理一維數組。 在 Java 中,我們可以創建多維數組。 多維數組是數組的數組。 在這樣的數組中,元素本身就是數組。 在多維數組中,我們使用兩組或更多組括號。 `com/zetcode/TwoDimensions.java` ```java package com.zetcode; public class TwoDimensions { public static void main(String[] args) { int[][] twodim = new int[][] { {1, 2, 3}, {1, 2, 3} }; int d1 = twodim.length; int d2 = twodim[1].length; for (int i = 0; i < d1; i++) { for (int j = 0; j < d2; j++) { System.out.println(twodim[i][j]); } } } } ``` 在此示例中,我們創建一個二維整數數組。 ```java int[][] twodim = new int[][] { {1, 2, 3}, {1, 2, 3} }; ``` 兩對方括號用于聲明二維數組。 在花括號內,我們還有另外兩對花括號。 它們代表兩個內部數組。 ```java int d1 = twodim.length; int d2 = twodim[1].length; ``` 我們確定容納其他兩個數組的外部數組和第二個內部數組的長度。 ```java for (int i = 0; i < d1; i++) { for (int j = 0; j < d2; j++) { System.out.println(twodim[i][j]); } } ``` 兩個`for`循環用于打印二維數組中的所有六個值。 `twodim[i][j]`數組的第一個索引引用內部數組之一。 第二個索引引用所選內部數組的元素。 ```java $ java TwoDimensions.java 1 2 3 1 2 3 ``` 這是程序的輸出。 以類似的方式,我們創建了一個三維整數數組。 `com/zetcode/ThreeDimensions.java` ```java package com.zetcode; public class ThreeDimensions { public static void main(String[] args) { int[][][] n3 = { {{12, 2, 8}, {0, 2, 1}}, {{14, 5, 2}, {0, 5, 4}}, {{3, 26, 9}, {8, 7, 1}}, {{4, 11, 2}, {0, 9, 6}} }; int d1 = n3.length; int d2 = n3[0].length; int d3 = n3[0][0].length; for (int i = 0; i < d1; i++) { for (int j = 0; j < d2; j++) { for (int k = 0; k < d3; k++) { System.out.print(n3[i][j][k] + " "); } } } System.out.print('\n'); } } ``` 擁有三維數組的變量用三對方括號聲明。 這些值放在三對大括號內。 ```java int[][][] n3 = { {{12, 2, 8}, {0, 2, 1}}, {{14, 5, 2}, {0, 5, 4}}, {{3, 26, 9}, {8, 7, 1}}, {{4, 11, 2}, {0, 9, 6}} }; ``` 創建三維數組`n3`。 它是一個具有元素的數組,這些元素本身就是數組的數組。 ```java int d1 = n3.length; int d2 = n3[0].length; int d3 = n3[0][0].length; ``` 我們得到所有三個維度的長度。 ```java for (int i = 0; i < d1; i++) { for (int j = 0; j < d2; j++) { for (int k = 0; k < d3; k++) { System.out.print(n3[i][j][k] + " "); } } } ``` 我們需要三個`for`循環來遍歷三維數組。 ```java $ java ThreeDimensions.java 12 2 8 0 2 1 14 5 2 0 5 4 3 26 9 8 7 1 4 11 2 0 9 6 ``` 我們將三維數組的內容打印到控制臺。 ## Java 不規則數組 元素大小相同的數組稱為矩形數組。 可以創建數組大小不同的不規則數組。 在 C# 中,此類數組稱為鋸齒狀數組。 `com/zetcode/IrregularArrays.java` ```java package com.zetcode; public class IrregularArrays { public static void main(String[] args) { int[][] ir = new int[][] { {1, 2}, {1, 2, 3}, {1, 2, 3, 4} }; for (int[] a : ir) { for (int e : a) { System.out.print(e + " "); } } System.out.print('\n'); } } ``` 這是不規則數組的示例。 ```java int[][] ir = new int[][] { {1, 2}, {1, 2, 3}, {1, 2, 3, 4} }; ``` 這是不規則數組的聲明和初始化。 三個內部數組具有 2、3 和 4 個元素。 ```java for (int[] a : ir) { for (int e : a) { System.out.print(e + " "); } } ``` 增強的`for`循環用于遍歷數組的所有元素。 ```java $ java IrregularArrays.java 1 2 1 2 3 1 2 3 4 ``` This is the output of the example. ## Java 數組方法 `java.util`包中提供的`Arrays`類是一個幫助器類,其中包含使用數組的方法。 這些方法可用于修改,排序,復制或搜索數據。 我們使用的這些方法是`Array`類的靜態方法。 (靜態方法是可以在不創建類實例的情況下調用的方法。) `com/zetcode/ArrayMethods.java` ```java package com.zetcode; import java.util.Arrays; public class ArrayMethods { public static void main(String[] args) { int[] a = {5, 2, 4, 3, 1}; Arrays.sort(a); System.out.println(Arrays.toString(a)); Arrays.fill(a, 8); System.out.println(Arrays.toString(a)); int[] b = Arrays.copyOf(a, 5); if (Arrays.equals(a, b)) { System.out.println("Arrays a, b are equal"); } else { System.out.println("Arrays a, b are not equal"); } } } ``` 在代碼示例中,我們將介紹`Arrays`類的五個方法。 ```java import java.util.Arrays; ``` 我們將對`Arrays`類使用簡寫形式。 ```java int[] a = {5, 2, 4, 3, 1}; ``` 我們有五個整數的數組。 ```java Arrays.sort(a); ``` `sort()`方法按升序對整數進行排序。 ```java System.out.println(Arrays.toString(a)); ``` `toString()`方法返回指定數組內容的字符串表示形式。 ```java Arrays.fill(a, 8); ``` `fill()`方法將指定的整數值分配給數組的每個元素。 ```java int[] b = Arrays.copyOf(a, 5); ``` `copyOf()`方法將指定數量的元素復制到新數組。 ```java if (Arrays.equals(a, b)) { System.out.println("Arrays a, b are equal"); } else { System.out.println("Arrays a, b are not equal"); } ``` `equals()`方法比較兩個數組。 如果兩個數組包含相同順序的相同元素,則它們相等。 ```java $ java ArrayMethods.java [1, 2, 3, 4, 5] [8, 8, 8, 8, 8] Arrays a, b are equal ``` 這是輸出。 ## Java 比較數組 比較數組有兩種方法。 `equals()`方法和`deepEquals()`方法。 `deepEquals()`方法也將引用與數組內部的數組進行比較。 `com/zetcode/ComparingArrays.java` ```java package com.zetcode; import java.util.Arrays; public class ComparingArrays { public static void main(String[] args) { int[] a = {1, 1, 2, 1, 1}; int[] b = {0, 0, 3, 0, 0}; int[][] c = { {1, 1, 2, 1, 1}, {0, 0, 3, 0, 0} }; int[][] d = { a, b }; System.out.print("equals() method: "); if (Arrays.equals(c, d)) { System.out.println("Arrays c, d are equal"); } else { System.out.println("Arrays c, d are not equal"); } System.out.print("deepEquals() method: "); if (Arrays.deepEquals(c, d)) { System.out.println("Arrays c, d are equal"); } else { System.out.println("Arrays c, d are not equal"); } } } ``` 該示例說明了兩種方法之間的區別。 ```java int[] a = {1, 1, 2, 1, 1}; int[] b = {0, 0, 3, 0, 0}; ``` 我們有兩個整數數組。 ```java int[][] c = { {1, 1, 2, 1, 1}, {0, 0, 3, 0, 0} }; ``` `c`數組有兩個內部數組。 內部數組的元素等于`a`和`b`數組。 ```java int[][] d = { a, b }; ``` `d`數組包含對`a`和`b`數組的引用。 ```java System.out.print("equals() method: "); if (Arrays.equals(c, d)) { System.out.println("Arrays c, d are equal"); } else { System.out.println("Arrays c, d are not equal"); } System.out.print("deepEquals() method: "); if (Arrays.deepEquals(c, d)) { System.out.println("Arrays c, d are equal"); } else { System.out.println("Arrays c, d are not equal"); } ``` 現在,使用這兩種方法比較`c`和`d`數組。 對于`equals()`方法,數組不相等。 `deepEquals()`方法在引用數組中更深入,并檢索它們的元素以進行比較。 對于此方法,`c`和`d`數組相等。 ```java $ java ComparingArrays.java equals() method: Arrays c, d are not equal deepEquals() method: Arrays c, d are equal ``` 這是示例輸出。 ## Java 搜索數組 `Arrays`類具有一種用于搜索數組中元素的簡單方法。 它稱為`binarySearch()`。 該方法使用二進制搜索算法搜索元素。 `binarySearch()`方法僅適用于排序數組。 `com/zetcode/Searching.java` ```java package com.zetcode; import java.util.Arrays; public class Searching { public static void main(String[] args) { String[] planets = { "Mercury", "Venus", "Mars", "Earth", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto" }; Arrays.sort(planets); String p = "Earth"; int r = Arrays.binarySearch(planets, p); String msg; if (r >= 0) { msg = String.format("%s was found at position %d of the " + "sorted array", p, r); } else { msg = p + " was not found"; } System.out.println(msg); } } ``` 在該示例中,我們在一系列行星中搜索`"Earth"`字符串。 ```java Arrays.sort(planets); ``` 由于該算法僅適用于排序后的數組,因此我們必須首先對數組進行排序。 ```java String p = "Earth"; ``` 我們將搜索`"Earth"`元素。 ```java int r = Arrays.binarySearch(planets, p); ``` 調用`binarySearch()`方法。 第一個參數是數組名稱,第二個參數是我們要查找的元素。 如果找到該元素,則返回值大于或等于零。 在這種情況下,它是排序數組中元素的索引。 ```java if (r >= 0) { msg = String.format("%s was found at position %d of the " + "sorted array", p, r); } else { msg = p + " was not found"; } ``` 根據返回的值,我們創建一條消息。 ```java $ java Searching.java Earth was found at position 0 of the sorted array ``` This is the example output. ## 下載圖片 在下一個示例中,我們顯示如何下載圖像。 `com/zetcode/DownloadImage.java` ```java package com.zetcode; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; public class DownloadImage { public static void main(String[] args) throws IOException { var imageUrl = "http://webcode.me/favicon.ico"; var destinationFile = "favicon.ico"; var url = new URL(imageUrl); try (var is = url.openStream(); var fos = new FileOutputStream(destinationFile)) { byte[] buf = new byte[1024]; int noOfBytes; while ((noOfBytes = is.read(buf)) != -1) { fos.write(buf, 0, noOfBytes); } } } } ``` 該示例下載一個小的`favicon.ico`圖像。 ```java byte[] buf = new byte[1024]; ``` 圖像是字節數組。 我們創建一個`byte`值的空數組,其大小足以容納該圖標。 ```java while ((noOfBytes = is.read(buf)) != -1) { fos.write(buf, 0, noOfBytes); } ``` 我們讀取二進制數據并將其寫入文件。 在 Java 教程的這一部分中,我們使用了數組。 我們已經描述了如何初始化數組,訪問數組元素,遍歷數組,使用多維數組,比較數組以及搜索數組元素。 {% endraw %}
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看