当前位置:首页 > 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程序的基本步骤 安装JDK(Java Development Kit)并配置环境变量。确保javac和java命令可在命令行中运行。JDK是编译和运行Java程序的必备工具。 创建Jav…

java如何自学

java如何自学

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

java如何创建类

java如何创建类

创建类的基本语法 在Java中,类通过class关键字定义,语法如下: [访问修饰符] class 类名 { // 成员变量(属性) // 构造方法 // 成员方法 }…

java如何生成随机数

java如何生成随机数

生成随机数的方法 在Java中生成随机数可以通过多种方式实现,以下是几种常见的方法: 使用Math.random()方法 Math.random()方法返回一个double类型的伪随机数,范围在[0…

java如何连接mysql

java如何连接mysql

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

vue实现java登录注册

vue实现java登录注册

实现 Vue 与 Java 后端的登录注册功能 前端 Vue 部分 安装必要的依赖(如 axios 用于 HTTP 请求): npm install axios 创建登录表单组件(Login.vue…