当前位置:首页 > Java

java如何穿插

2026-03-19 14:55:29Java

Java 中的穿插操作

在 Java 中,"穿插"通常指将两个或多个数据集合、字符串或数组按特定顺序交替合并。以下是几种常见的实现方法:

字符串穿插合并

使用 StringBuilder 交替追加字符:

String str1 = "ace";
String str2 = "bdf";
StringBuilder result = new StringBuilder();

int maxLength = Math.max(str1.length(), str2.length());
for (int i = 0; i < maxLength; i++) {
    if (i < str1.length()) result.append(str1.charAt(i));
    if (i < str2.length()) result.append(str2.charAt(i));
}
System.out.println(result.toString()); // 输出 "abcdef"

数组穿插合并

对于两个数组的交替合并:

int[] arr1 = {1, 3, 5};
int[] arr2 = {2, 4, 6, 8};
int[] merged = new int[arr1.length + arr2.length];

int index = 0;
for (int i = 0; i < Math.max(arr1.length, arr2.length); i++) {
    if (i < arr1.length) merged[index++] = arr1[i];
    if (i < arr2.length) merged[index++] = arr2[i];
}
// 结果: [1, 2, 3, 4, 5, 6, 8]

使用流(Stream)实现

Java 8+ 可以使用流式操作:

List<String> list1 = Arrays.asList("a", "c", "e");
List<String> list2 = Arrays.asList("b", "d", "f");

List<String> interleaved = IntStream.range(0, Math.max(list1.size(), list2.size()))
    .boxed()
    .flatMap(i -> {
        List<String> pair = new ArrayList<>();
        if (i < list1.size()) pair.add(list1.get(i));
        if (i < list2.size()) pair.add(list2.get(i));
        return pair.stream();
    })
    .collect(Collectors.toList());
// 结果: [a, b, c, d, e, f]

多线程交替执行

实现线程间的交替执行(同步控制):

class InterleaveThreads {
    private static final Object lock = new Object();
    private static volatile boolean turn = true;

    public static void main(String[] args) {
        new Thread(() -> print("A", true)).start();
        new Thread(() -> print("B", false)).start();
    }

    static void print(String s, boolean myTurn) {
        for (int i = 0; i < 5; i++) {
            synchronized (lock) {
                while (turn != myTurn) {
                    try { lock.wait(); } 
                    catch (InterruptedException e) {}
                }
                System.out.print(s);
                turn = !turn;
                lock.notifyAll();
            }
        }
    }
}
// 输出: ABABABABAB

集合穿插算法

通用集合穿插方法:

java如何穿插

public static <T> List<T> interleave(List<T> list1, List<T> list2) {
    List<T> result = new ArrayList<>();
    Iterator<T> it1 = list1.iterator();
    Iterator<T> it2 = list2.iterator();

    while (it1.hasNext() || it2.hasNext()) {
        if (it1.hasNext()) result.add(it1.next());
        if (it2.hasNext()) result.add(it2.next());
    }
    return result;
}

这些方法可以根据具体需求选择,字符串和数组操作适合简单场景,流式处理更函数式,而多线程方案适用于并发控制场景。

标签: java
分享给朋友:

相关文章

java如何自学

java如何自学

确定学习目标和路径 自学Java需要明确目标,例如开发Web应用、Android应用或后端服务。根据目标选择学习重点,如Java基础、Spring框架或Android开发。制定阶段性计划,从基础语法到…

如何编译java

如何编译java

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证是否安装成功。若未安装,需从Oracl…

如何搭建java环境

如何搭建java环境

下载JDK 访问Oracle官网或OpenJDK官网下载适合操作系统的JDK安装包。推荐选择长期支持版本(如JDK 17或JDK 21)。 安装JDK 运行下载的安装程序,按照向导完成安装。注意…

java如何连接mysql数据库

java如何连接mysql数据库

连接 MySQL 数据库的步骤 添加 MySQL 驱动依赖 在项目中引入 MySQL 的 JDBC 驱动。如果使用 Maven,可以在 pom.xml 中添加以下依赖: <dependency…

如何阅读java源码

如何阅读java源码

阅读Java源码的方法 选择合适的源码项目 初学者建议从JDK核心类库(如java.lang、java.util)或知名开源项目(如Spring、Guava)入手。选择文档完善、社区活跃的项目能降低理…

如何学习java语言

如何学习java语言

学习Java语言的系统方法 理解基础概念 Java是一种面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制流语句(if-else、循环)是第一步。熟悉类和对象的概念,理解封装、继承和多态三…