Java Stack如何实现批量入栈pushAll和批量出栈popN方法
方法实现代码
你可以直接用下方代码替换类中待实现的两个空方法:
public void pushAll (Object all[]) throws StackFullException { // 入参非空校验(可选补充边界处理) if (all == null) { throw new IllegalArgumentException("入栈数组不能为null"); } // 优先校验剩余空间是否足够 int requiredSpace = all.length; int freeSpace = capacity - size(); if (requiredSpace > freeSpace) { throw new StackFullException("栈剩余空间不足,无法完成批量入栈"); } // 按数组顺序入栈,天然保证数组最后一个元素在栈顶 for (Object item : all) { push(item); } } public Object [] popN (int n) throws StackEmptyException { // 入参合法性校验(可选补充边界处理) if (n < 0) { throw new IllegalArgumentException("弹出元素数量不能为负数"); } // 优先校验栈内元素是否足够弹出 int currentCount = size(); if (n > currentCount) { throw new StackEmptyException("栈内元素不足,无法完成批量弹出"); } Object[] result = new Object[n]; // 逐个弹出元素存入结果数组 for (int i = 0; i < n; i++) { result[i] = pop(); } return result; }
逻辑说明
- pushAll方法提前做了空间校验,只要触发异常就不会执行任何入栈操作,不会出现部分元素入栈的问题;复用原有单元素push逻辑,不需要重复写指针移动、元素赋值的代码,保证逻辑一致性。
- popN方法提前做了元素数量校验,只要触发异常就不会执行任何出栈操作;复用原有单元素pop逻辑,自动处理元素清空、指针回退的操作,返回数组的顺序和弹出顺序完全一致(数组第一个元素为原栈顶元素)。
内容的提问来源于stack exchange,提问作者prhg
相关产品推荐
相关产品推荐

