杰瑞科技汇

Java二维数组如何高效存储String?

声明和初始化

创建二维 String 数组主要有两种方式:静态初始化和动态初始化。

Java二维数组如何高效存储String?-图1
(图片来源网络,侵删)

静态初始化

在声明数组的同时就为其分配空间并赋值。

// 语法:数据类型[][] 数组名 = new 数据类型[][]{{...}, {...}, ...};
// 创建一个 3x4 的二维 String 数组(3行4列)
String[][] names = {
    {"Alice", "Bob", "Charlie", "David"},
    {"Eve", "Frank", "Grace", "Hank"},
    {"Ivy", "Jack", "Kate", "Leo"}
};
// 也可以先声明,再初始化
String[][] cities;
cities = new String[][] {
    {"Beijing", "Shanghai"},
    {"New York", "Los Angeles", "Chicago"},
    {"London", "Paris", "Berlin", "Madrid"}
};

动态初始化

先声明数组并指定其行数和列数,然后再为每个元素赋值。

// 语法:数据类型[][] 数组名 = new 数据类型[行数][列数];
// 先声明一个 2x3 的二维 String 数组
String[][] matrix = new String[2][3];
// 然后通过索引为每个元素赋值
matrix[0][0] = "A";
matrix[0][1] = "B";
matrix[0][2] = "C";
matrix[1][0] = "D";
matrix[1][1] = "E";
matrix[1][2] = "F";

注意:在 Java 中,二维数组的每一行(即内部的数组)长度可以不同,这被称为“不规则的二维数组”或“锯齿数组”。

// 创建一个不规则的二维 String 数组
String[][] jaggedArray = new String[3][]; // 只指定行数
// 为每一行分配不同大小的列数
jaggedArray[0] = new String[2]; // 第1行有2个元素
jaggedArray[1] = new String[4]; // 第2行有4个元素
jaggedArray[2] = new String[1]; // 第3行有1个元素
// 赋值
jaggedArray[0][0] = "One";
jaggedArray[0][1] = "Two";
jaggedArray[1][0] = "Three";
jaggedArray[1][1] = "Four";
jaggedArray[1][2] = "Five";
jaggedArray[1][3] = "Six";
jaggedArray[2][0] = "Seven";

访问和修改元素

使用 数组名[行索引][列索引] 的方式来访问或修改元素,索引从 0 开始。

String[][] names = {
    {"Alice", "Bob"},
    {"Charlie", "David"}
};
// 访问元素
String firstName = names[0][0]; // 获取 "Alice"
String secondName = names[1][1]; // 获取 "David"
System.out.println("First name: " + firstName);
System.out.println("Second name: " + secondName);
// 修改元素
names[0][0] = "Alice Smith";
System.out.println("Modified first name: " + names[0][0]); // 输出 "Alice Smith"

遍历二维数组

遍历二维数组通常需要使用嵌套的 for 循环:外层循环遍历行,内层循环遍历列。

使用经典的 for 循环

String[][] names = {
    {"Alice", "Bob"},
    {"Charlie", "David"},
    {"Eve", "Frank"}
};
System.out.println("--- 遍历所有名字 ---");
for (int i = 0; i < names.length; i++) { // 遍历行 (names.length 是行数)
    for (int j = 0; j < names[i].length; j++) { // 遍历列 (names[i].length 是第 i 行的列数)
        System.out.print(names[i][j] + " ");
    }
    System.out.println(); // 每行结束后换行
}

输出:

--- 遍历所有名字 ---
Alice Bob 
Charlie David 
Eve Frank 

使用增强型 for 循环 (for-each)

这种方式代码更简洁,但无法获取元素的索引。

String[][] names = {
    {"Alice", "Bob"},
    {"Charlie", "David"}
};
System.out.println("\n--- 使用 for-each 遍历 ---");
// 第一个 String[] 代表每一行(一个一维数组)
// 第二个 String 代表该行中的每一个元素
for (String[] row : names) {
    for (String name : row) {
        System.out.print(name + " ");
    }
    System.out.println();
}

输出:

--- 使用 for-each 遍历 ---
Alice Bob 
Charlie David 

获取数组长度

  • 行数数组名.length
  • 列数数组名[行索引].length (因为每行的列数可能不同)
String[][] cities = {
    {"Beijing", "Shanghai"},
    {"New York", "Los Angeles", "Chicago"}
};
int rows = cities.length; // 行数
System.out.println("行数: " + rows); // 输出 2
int colsInRow0 = cities[0].length; // 第0行的列数
int colsInRow1 = cities[1].length; // 第1行的列数
System.out.println("第0行的列数: " + colsInRow0); // 输出 2
System.out.println("第1行的列数: " + colsInRow1); // 输出 3

完整示例代码

这是一个综合性的示例,展示了如何声明、初始化、遍历和操作二维 String 数组。

public class String2DArrayExample {
    public static void main(String[] args) {
        // 1. 静态初始化一个学生姓名的二维数组
        String[][] students = {
            {"张三", "李四", "王五"},
            {"Alice", "Bob"},
            {"Charlie", "David", "Eve", "Frank"}
        };
        // 2. 遍历并打印所有学生姓名
        System.out.println("所有学生名单:");
        print2DArray(students);
        // 3. 访问并修改一个元素
        System.out.println("\n将 'Bob' 修改为 'Robert'");
        students[1][1] = "Robert";
        System.out.println("修改后的名单:");
        print2DArray(students);
        // 4. 动态初始化一个课程表
        String[][] schedule = new String[3][5]; // 3天,每天5节课
        // 为课程表赋值
        schedule[0][0] = "数学";
        schedule[0][1] = "语文";
        schedule[0][2] = "英语";
        schedule[0][3] = "物理";
        schedule[0][4] = "化学";
        schedule[1][0] = "历史";
        schedule[1][1] = "地理";
        schedule[1][2] = "生物";
        schedule[1][3] = "体育";
        schedule[1][4] = "美术";
        schedule[2][0] = "编程";
        schedule[2][1] = "数据结构";
        schedule[2][2] = "算法";
        schedule[2][3] = "数据库";
        schedule[2][4] = "软件工程";
        // 5. 打印课程表
        System.out.println("\n课程表:");
        print2DArray(schedule);
    }
    /**
     * 一个通用的打印二维String数组的方法
     * @param array 要打印的二维数组
     */
    public static void print2DArray(String[][] array) {
        for (int i = 0; i < array.length; i++) {
            System.out.print("第 " + (i + 1) + " 组: ");
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println(); // 换行
        }
    }
}

输出结果:

所有学生名单:
第 1 组: 张三 李四 王五 
第 2 组: Alice Bob 
第 3 组: Charlie David Eve Frank 
将 'Bob' 修改为 'Robert'
修改后的名单:
第 1 组: 张三 李四 王五 
第 2 组: Alice Robert 
第 3 组: Charlie David Eve Frank 
课程表:
第 1 组: 数学 语文 英语 物理 化学 
第 2 组: 历史 地理 生物 体育 美术 
第 3 组: 编程 数据结构 算法 数据库 软件工程 
  • 核心概念:二维 String 数组是 String 类型的“数组的数组”。
  • 声明初始化:静态初始化(直接赋值)和动态初始化(先分配空间再赋值)。
  • 不规则数组:Java 支持每行长度不同的二维数组。
  • 访问元素:使用 array[row][col]
  • 遍历:使用嵌套 for 循环,外层循环行,内层循环列。
  • 长度array.length 是行数,array[i].length 是第 i 行的列数。
分享:
扫描分享到社交APP
上一篇
下一篇