前端视角 Java Web 入门手册 2.3:Array

Java 数组(Array)用于存储固定大小的同类型元素序列,数组中的元素可以是基本类型或对象类型。每个元素在数组中都有一个索引,通过索引可以高效地访问、修改或遍历元素

Java 的数组和 JavaScript 数据有几个明显的区别

  • JavaScript 数组中可以存储任意类型的元素;Java 数组是强类型的,只能存储相同类型的元素
  • JavaScript 数组是动态的,大小可以随时改变,也可以通过 delete 关键字删除数组元素;Java 数组是静态的,它在声明时就需要指定数组大小,数组大小不能动态改变

初始化

数组必须先声明后使用,并在创建时指定类型与大小,一旦创建无法更改

java 复制代码
// 创建一维数组,包含10个整数
int[] numbers;
numbers = new int[10];

// 一维数组初始化,注意和 JavaScript 的语法区别,元素使用 {} 而不是 []
int[] numbers = {1, 2, 3, 4, 5};

// 二维数组初始化
String[][] names = {
    {"Alice", "Bob"},
    {"Charlie", "David"},
    {"Eve", "Frank"}
};

// 使用 `new` 关键字进行部分初始化
double[] salary = new double[]{50000.0, 60000.0, 55000.0};

JavaScript 中字面量初始化数组使用 []

遍历

Java 遍历数组的方式和 JavaScript 非常类似

java 复制代码
int[] nums = {1, 2, 3, 4, 5};

for (int i = 0; i < nums.length; i++) {
    System.out.println(nums[i]);
}

for (int n : nums) { // JavaScript 使用 for...in
    System.out.println(n);
}

排序

对于数值类型的数组,可以直接通过 Arrays 的静态函数 sort 排序,数组本身被改变

java 复制代码
int[] nums = {4, 2, 9, 5, 8, 6, 0};
Arrays.sort(nums); // 升序

sort 方法支持自定义排序方式

java 复制代码
import java.util.Arrays;
import java.util.Comparator;

class MyComparator implements Comparator<Integer> {
    @Override
    public int compare(Integer x, Integer y) {
        return y - x;
    }
}

public class Demo {
    public static void main(String[] args) throws Exception {
        Integer[] nums = { 1, 2, 3, 4, 5, 0 };
        Comparator<Integer> cmp = new MyComparator();
        Arrays.sort(nums, cmp);

        for (int n : nums) {
            System.out.println(n);
        }
    }
}

当然可以使用 lambda 表达式简化程序

java 复制代码
import java.util.Arrays;

public class Demo {
    public static void main(String[] args) throws Exception {
        Integer[] nums = { 1, 2, 3, 4, 5, 0 };
        Arrays.sort(nums, (x, y) -> y - x);

        for (int n : nums) {
            System.out.println(n);
        }
    }
}

java.util.Arrays 工具类

java.util.Arrays 是一个实用类,提供了操作数组的静态方法,如排序、搜索、填充和比较等

方法 描述
sort() 对数组进行排序
binarySearch() 使用二分查找在排序数组中查找元素
copyOf() 复制指定长度的数组
copyOfRange() 复制数组的一个范围
fill() 使用特定值填充数组
equals() 比较两个数组是否相等
hashCode() 生成数组的哈希码
toString() 将数组转换为字符串描述
deepToString() 深层次转换多维数组为字符串描述
stream() 将数组转换为流
java 复制代码
import java.util.Arrays;

public class ArraysExample {
    public static void main(String[] args) {
        int[] numbers = {40, 10, 30, 20, 50};
        
        // 排序
        Arrays.sort(numbers);
        System.out.println("排序后: " + Arrays.toString(numbers)); // 输出: [10, 20, 30, 40, 50]
        
        // 二分查找
        int index = Arrays.binarySearch(numbers, 30);
        System.out.println("30 的索引位置: " + index); // 输出: 2
        
        // 复制数组
        int[] copy = Arrays.copyOf(numbers, numbers.length);
        System.out.println("复制数组: " + Arrays.toString(copy)); // 输出: [10, 20, 30, 40, 50]
        
        // 填充数组
        Arrays.fill(copy, 0);
        System.out.println("填充后: " + Arrays.toString(copy)); // 输出: [0, 0, 0, 0, 0]
        
        // 比较数组
        boolean isEqual = Arrays.equals(numbers, copy);
        System.out.println("数组是否相等: " + isEqual); // 输出: false
    }
}

集合框架

Java 通过数组这种数据结构来满足基本的存储和操作需求,但数组有许多限制性的问题,如固定大小、操作方法有限等。为了能够更灵活、更高效地管理复杂的数据集合,Java 提供了一个丰富的集合框架(Collection Framework)

  • List :代表有序的元素集合,允许重复元素。常见实现类有 ArrayListLinkedList
  • Set :代表不允许重复的无序集合。常见实现类有 HashSetLinkedHashSetTreeSet
  • Map :存储键值对映射关系。常见实现类有 HashMapLinkedHashMapTreeMap
  • Queue :代表一个先进先出的集合,常见实现类有 PriorityQueueLinkedList(可作为队列使用)。
java 复制代码
import java.util.ArrayList;
import java.util.List;

List<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);

int target = 30;

if (numbers.contains(target)) {
    System.out.println(target + " 存在于集合中。");
} else {
    System.out.println(target + " 不存在于集合中。");
}
相关推荐
盖世英雄酱581368 分钟前
物品超领取损失1万事故复盘(一)
java·后端
凌览13 分钟前
别再死磕 Nginx!http-proxy-middleware 低配置起飞
前端·后端
拾玖不会code13 分钟前
简单分表场景下的业务发散思考:分表如何保证丝滑?
后端
CryptoRzz14 分钟前
印度尼西亚(IDX)股票数据对接开发
java·后端·websocket·web3·区块链
你怎么知道我是队长1 小时前
C语言---文件读写
java·c语言·开发语言
咕白m6251 小时前
通过 C# 快速生成二维码 (QR code)
后端·.net
踏浪无痕1 小时前
架构师如何学习 AI:三个月掌握核心能力的务实路径
人工智能·后端·程序员
小毅&Nora1 小时前
【后端】【SpringBoot】① 源码解析:从启动到优雅关闭
spring boot·后端·优雅关闭
嘻哈baby1 小时前
从TIME_WAIT爆炸到端口耗尽:Linux短连接服务排查与优化
后端
wszy18092 小时前
外部链接跳转:从 App 打开浏览器的正确姿势
java·javascript·react native·react.js·harmonyos