Java 针对特定范围的元素递归反转arraylist
我试图递归地反转数组列表中的元素。但是,像1-3中的[1,2,3,4]这样的示例输出返回[4,2,2,4]而不是[1,4,3,2]ChangeJava 针对特定范围的元素递归反转arraylist,java,recursion,arraylist,Java,Recursion,Arraylist,我试图递归地反转数组列表中的元素。但是,像1-3中的[1,2,3,4]这样的示例输出返回[4,2,2,4]而不是[1,4,3,2]Change public static void reverse(ArrayList<Integer> numbers, int start, int end) { if (start < end) { int temp = numbers.get(start); numbers.set(numbers.in
public static void reverse(ArrayList<Integer> numbers, int start, int end) {
if (start < end) {
int temp = numbers.get(start);
numbers.set(numbers.indexOf(start), numbers.get(end));
numbers.set(numbers.indexOf(end), temp);
reverse(numbers, start + 1, end - 1);
}
}
到
开始、结束是列表中要交换值的索引。您不应该调用indexOf来获取索引。indexOf为您传递的值的第一次出现提供索引。更改
public static void reverse(ArrayList<Integer> numbers, int start, int end) {
if (start < end) {
int temp = numbers.get(start);
numbers.set(numbers.indexOf(start), numbers.get(end));
numbers.set(numbers.indexOf(end), temp);
reverse(numbers, start + 1, end - 1);
}
}
到
开始、结束是列表中要交换值的索引。您不应该调用indexOf来获取索引。indexOf为您传递的值的第一次出现提供索引。tl;博士
你工作太辛苦了。无需编写递归反向方法
修改部分列表上的视图会影响原始列表
numbers.set(start, numbers.get(end));
numbers.set(end, temp);
Collections
.reverse( // Re-ordering a sublist view affects the original list.
numbers // Your modifiable list of objects (Integer objects in your case).
.subList( 1 , 3 + 1 ) // Specify your desired subset that needs reversing, to get a view backed by the original list. Use zero-based index numbers. Add one as the ending is exclusive.
) ;
列表::子列表
调用的结果是直接基于原始列表的该部分的视图。如果更改原始列表,则更改子列表视图
更重要的是,在这里,如果您更改子列表视图,则会更改原始视图。因此,让我们只反转子视图以影响原始视图
当然,这只适用于这样的情况
收藏。反面
要反转列表,请调用实用程序方法
在这两行代码中,我们创建一个列表,获取该列表的一部分的视图,反转该部分中的元素,从而影响原始列表
numbers.set(start, numbers.get(end));
numbers.set(end, temp);
Collections
.reverse( // Re-ordering a sublist view affects the original list.
numbers // Your modifiable list of objects (Integer objects in your case).
.subList( 1 , 3 + 1 ) // Specify your desired subset that needs reversing, to get a view backed by the original list. Use zero-based index numbers. Add one as the ending is exclusive.
) ;
看这个
数字=[1,2,3,4]
数字=[1,4,3,2]
tl;博士
你工作太辛苦了。无需编写递归反向方法
修改部分列表上的视图会影响原始列表
numbers.set(start, numbers.get(end));
numbers.set(end, temp);
Collections
.reverse( // Re-ordering a sublist view affects the original list.
numbers // Your modifiable list of objects (Integer objects in your case).
.subList( 1 , 3 + 1 ) // Specify your desired subset that needs reversing, to get a view backed by the original list. Use zero-based index numbers. Add one as the ending is exclusive.
) ;
列表::子列表
调用的结果是直接基于原始列表的该部分的视图。如果更改原始列表,则更改子列表视图
更重要的是,在这里,如果您更改子列表视图,则会更改原始视图。因此,让我们只反转子视图以影响原始视图
当然,这只适用于这样的情况
收藏。反面
要反转列表,请调用实用程序方法
在这两行代码中,我们创建一个列表,获取该列表的一部分的视图,反转该部分中的元素,从而影响原始列表
numbers.set(start, numbers.get(end));
numbers.set(end, temp);
Collections
.reverse( // Re-ordering a sublist view affects the original list.
numbers // Your modifiable list of objects (Integer objects in your case).
.subList( 1 , 3 + 1 ) // Specify your desired subset that needs reversing, to get a view backed by the original list. Use zero-based index numbers. Add one as the ending is exclusive.
) ;
看这个
数字=[1,2,3,4]
数字=[1,4,3,2]
除了比较“开始”和“结束”的值外,还必须进行如下所示的其他检查,以避免IndexOutOfBoundsException:
@SomeDude已经回答了其余的更正。除了比较开始和结束的值外,还必须进行如下所示的其他检查,以避免IndexOutOfBoundsException:
其余的更正已经由@SomeDude回答。为什么要排序?OP想要的只是在两个索引之间反转列表。@somedode我没意识到这一点。我太专注于示例数据了。修订过的。谢谢。如果“递归”不是必需的,这应该是公认的答案。为什么要排序?OP想要的只是在两个索引之间反转列表。@somedode我没意识到这一点。我太专注于示例数据了。修订过的。谢谢。如果“递归”不是必需的,这应该是公认的答案。