You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除ArrayList中的空索引?求完善数组移除第5个元素的代码

问题1:如何从ArrayList中移除空索引?

首先得澄清一个点:ArrayList的索引是连续分配的,不存在“空索引”——你应该是想移除ArrayList中值为null的元素吧?如果是这样,这里有几种实用的实现方式:

  • 迭代器遍历移除(最安全,避免并发修改异常)
    这是处理集合元素移除的经典方式,能避免遍历过程中修改集合导致的ConcurrentModificationException:

    ArrayList<String> list = new ArrayList<>();
    // 假设list中已包含元素,包括null值
    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
        String element = iterator.next();
        if (element == null) {
            iterator.remove();
        }
    }
    
  • Java 8+ Stream API过滤
    如果你的项目用的是Java 8及以上版本,用Stream来过滤会更简洁:

    import java.util.stream.Collectors;
    import java.util.Objects;
    
    // 过滤掉null元素,重新收集为ArrayList
    list = list.stream()
               .filter(Objects::nonNull)
               .collect(Collectors.toCollection(ArrayList::new));
    
  • 直接调用removeAll方法
    这是最简洁的一行代码实现方式:

    import java.util.Collections;
    
    list.removeAll(Collections.singleton(null));
    

问题2:移除数组中的第5个名字

你当前用的是固定长度的Java数组,而数组的长度是不可变的,所以不能直接“移除”元素,只能通过创建新数组或者调整元素位置来实现需求。另外要注意:Java数组的索引是从0开始的,所以你说的“第5个名字”对应的索引是4(如果是从1开始计数的话)。

下面给你两种实现方案:

方案一:基于原数组调整(创建新数组)

这是最贴合你现有代码的方案,通过复制元素到新数组来跳过要移除的元素:

import java.util.Scanner;

public class RemoveInvite {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] invites = new String[10];
        
        // 用户输入10个名字
        System.out.println("Please enter 10 names: ");
        System.out.println("*************************************************");
        for(int i = 0; i < 10; i++){
            invites[i] = sc.nextLine();
        }
        System.out.println("*************************************************");
        
        // 要移除的第5个名字的索引(从1数的第5个对应索引4)
        int removeIndex = 4;
        // 创建长度减1的新数组
        String[] newInvites = new String[invites.length - 1];
        
        // 复制元素,跳过要移除的索引
        for (int i = 0, j = 0; i < invites.length; i++) {
            if (i != removeIndex) {
                newInvites[j++] = invites[i];
            }
        }
        
        // 输出结果
        System.out.println("移除第5个名字后的列表:");
        for (String name : newInvites) {
            System.out.println(name);
        }
        
        sc.close();
    }
}

方案二:改用ArrayList(更灵活)

如果后续还有更多增删元素的需求,非常推荐用ArrayList替代数组,它的remove(int index)方法可以直接删除指定索引的元素,自动调整后续元素位置,代码更简洁:

import java.util.ArrayList;
import java.util.Scanner;

public class RemoveInviteWithArrayList {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<String> invites = new ArrayList<>();
        
        // 用户输入10个名字
        System.out.println("Please enter 10 names: ");
        System.out.println("*************************************************");
        for(int i = 0; i < 10; i++){
            invites.add(sc.nextLine());
        }
        System.out.println("*************************************************");
        
        // 直接移除第5个名字(索引4)
        invites.remove(4);
        
        // 输出结果
        System.out.println("移除第5个名字后的列表:");
        for (String name : invites) {
            System.out.println(name);
        }
        
        sc.close();
    }
}

内容的提问来源于stack exchange,提问作者BroSki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:34:42