前端视角 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 + " 不存在于集合中。");
}
相关推荐
飞翔的佩奇8 分钟前
Java项目: 基于SpringBoot+mybatis+maven+mysql实现的疾病防控综合管理系统(含源码+数据库+毕业论文)
java·数据库·spring boot·mysql·spring·毕业设计·疾病防控
power-辰南21 分钟前
技术架构师成长路线(2025版)
java·架构师·学习路线·技术专家
二十雨辰22 分钟前
[Java基础]面向对象
java·开发语言
栗豆包1 小时前
w187社区养老服务平台的设计与实现
java·spring boot·后端·spring·tomcat
violin-wang1 小时前
如何在Intellij IDEA中识别一个文件夹下的多个Maven module?
java·spring boot·spring·maven·intellij-idea
假客套1 小时前
Java小白入门教程:LinkedList
java·开发语言
lingllllove2 小时前
Maven的三种项目打包方式——pom,jar,war的区别
java·maven·jar
雨 子2 小时前
Maven jar 包下载失败问题处理
java·maven·jar
为美好的生活献上中指2 小时前
java每日精进1.31(SpringSecurity)
java·开发语言·微服务
星如雨グッ!(๑•̀ㅂ•́)و✧2 小时前
Spring Boot 2 快速教程:WebFlux处理流程(五)
java·spring boot·后端