前端视角 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 :代表有序的元素集合,允许重复元素。常见实现类有 ArrayList、LinkedList。
  • Set :代表不允许重复的无序集合。常见实现类有 HashSet、LinkedHashSet、TreeSet。
  • Map :存储键值对映射关系。常见实现类有 HashMap、LinkedHashMap、TreeMap。
  • Queue :代表一个先进先出的集合,常见实现类有 PriorityQueue、LinkedList(可作为队列使用)。
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 + " 不存在于集合中。");
}
相关推荐
宸津-代码粉碎机6 小时前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
噢,我明白了7 小时前
java中唯一键和幂等键的应用
java·后端
程序猿乐锅7 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
GreenTea8 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
考虑考虑8 小时前
synchronized字符串常量
java·后端·java ee
长谷深风1118 小时前
Tool与Skill:AI能力设计的分水岭
java·人工智能·ai·大模型·aiagent
m0_587383008 小时前
广州24小时自助健身房解决方案实战指南与系统部署要点
java·spring·小程序·架构·需求分析
Escalating_xu8 小时前
【C 语言】深入理解指针(1·下):指针运算、野指针、assert 与传址实战
java·c语言·开发语言
周杰偷奶茶8 小时前
【Java】数据类型与变量
java·开发语言
code斗8 小时前
Java数据结构:堆详解
java·开发语言·数据结构