如何移除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
相关产品推荐
相关产品推荐

