ArrayList反转相关问题:原地反转及反转存新列表报错解决
问题解答
Hey there! Let's break down your questions step by step, since you ran into a common pitfall with the Collections.reverse() method.
1. 为什么会出现"Required Arraylist get void"错误
首先明确错误根源:Collections.reverse()是**无返回值(void)**的方法——它不会生成并返回一个新的反转列表,而是直接修改你传入的原列表。
如果你写了类似这样的代码:
ArrayList<String> newList = Collections.reverse(temp);
就会触发这个错误:你试图把一个void类型的结果赋值给ArrayList变量,这在语法上是不允许的。
2. 正确将反转后的temp存入另一个ArrayList的方法
如果想要保留原temp列表的内容,同时把反转后的结果存到新列表里,你需要先复制原列表,再反转这个副本:
// 假设temp是你的原始ArrayList ArrayList<String> temp = new ArrayList<>(Arrays.asList("apple", "banana", "cherry")); // 步骤1:复制原列表到新列表 ArrayList<String> reversedTemp = new ArrayList<>(temp); // 步骤2:反转新列表 Collections.reverse(reversedTemp); // 现在reversedTemp是反转后的结果,原temp完全不受影响
如果不需要保留原temp的内容,你也可以先反转原列表,再复制到新列表,但上面的方法在需要保留原始数据时更稳妥。
3. 能否将反转结果存入一维数组?
当然可以!这里有两种常用方案:
方案1:先反转原列表,再转成数组
// 先修改原列表,将其反转 Collections.reverse(temp); // 转成数组(根据你的列表元素类型调整数组类型) String[] reversedArray = temp.toArray(new String[0]);
方案2:保留原列表,反转副本后转成数组
// 先创建原列表的反转副本 ArrayList<String> reversedTemp = new ArrayList<>(temp); Collections.reverse(reversedTemp); // 将反转副本转成数组 String[] reversedArray = reversedTemp.toArray(new String[0]);
4. 原地反转ArrayList(不存储到另一个列表)
如果你的需求是直接修改原列表实现反转,不需要额外存储到新列表,直接调用Collections.reverse()即可:
Collections.reverse(temp); // 此时temp本身就已经是反转后的状态了
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

