我有以下列表:
清单1 = 1,2,3,4,5,6
我正在尝试制作一个包含以下内容的列表:
列表c = 1,6,2,5,3,4
然而,我无法弄明白该怎么做。我知道如何迭代6但我不知道如何到达最后一个数字并向后迭代。我知道ListIterator可以用来倒退但我仍然无法弄明白。
这就是我添加原作所做的,我只是不理解如何向后迭代:
public static void q(Set<String>list1)
{
Set<String>combined = new HashSet();
Iterator<String> forward = list1.iterator();
Iterator <String> backwards = list1.iterator();
for (int i=0; i<list1.size(); i++)
{
combined.add(forward.next());
//code to go backwards
}
}
答案 0 :(得分:1)
简单的Algo将是
1。)只使用两个位置,i =0
表示增量,j = size-1
表示减量
2。)在遍历内容列表中间时,使用i
和j
位置将元素添加到新列表中
Integer []aa=new Integer[]{1,2,3,4,5,6};
List<Integer> list =Arrays.asList(aa);
int n=list.size();
List<Integer> list2 =new ArrayList<>();
for (int i = 0,j=list.size()-1; i <n/2 ; i++,j--) {
list2.add(list.get(i));
list2.add(list.get(j));
}
// if(n%2!=0) list2.add(list.get(n/2)); // un-comment this , to handle
// odd list size too ,dynamism
list2.forEach(i->System.err.print(i+" "));
输出:
1 6 2 5 3 4
答案 1 :(得分:1)
假设您只想将第一个列表的最后一个元素放在第二个索引上,您可以执行以下操作:
List<Integer> input = Arrays.asList(1, 2, 3, 4, 5, 6);
// create new list that initially contains first and last element of input list
List<Integer> output = new ArrayList<>(Arrays.asList(input.get(0), input.get(input.size()-1)));
// now iterate the "in between" input elements and add them to output
for (int i=1; i < input.size() -1 ; i++) {
output.add(input.get(i));
}
System.out.println("in: " + input);
System.out.println("out: " + output);
当然,上述只是这样做的一种方式;还有很多其他的
答案 2 :(得分:1)
不确定您的确切要求以及您的代码已经破坏的位置。你可以尝试:
List<Integer> intergers = new ArrayList<>();
for(int i = 1; i < 7; i++) {
if(i < 6) {
intergers.add((i-1), i);
} else {
intergers.add(1, i); //when i is 6 place it in the second index
}
}
System.out.println("List: " + intergers.toString());
使用java list,您可以选择索引,如果该索引具有值,则该值可以推送到下一个索引。这是我能想到的最简单的事情。这是打印出来的:
列表:[1,6,2,3,4,5]
答案 3 :(得分:1)
这不是解决您的问题,而是向您展示如何ListIterator
可以用来倒退,因为您无法弄明白。
List<Integer> list = new ArrayList<>();
for (int n = 1; n <= 6; n++) { // Add 1, 2, ... 6 to list
list.add(n);
}
ListIterator it = list.listIterator(list.size());
while (it.hasPrevious()) {
System.out.println(it.previous());
}
listIterator
的{{1}}方法允许您指定作为参数开始的索引。
List
的{{1}}方法检查是否存在前一个元素(自解释)。
hasPrevious
的{{1}}方法返回列表中的上一个元素,并向后移动光标位置。
使用ListIterator
,您可以根据需要分别使用previous()
和ListIterator
前进和后退。
或者,使用for语句而不是ListIterator
...
next()
答案 4 :(得分:1)
鉴于您在谈论列表,我不确定您是否真的想要一套。这是没有明确使用列表迭代器的想法,但是它们的行为类似。
如何使用列表迭代器:http://www.java2s.com/Tutorial/Java/0140__Collections/ListIteratorInreverseorder.htm
public static List<Integer> interleaveFrontBack(List<Integer> list) {
if (list.size() <= 2){
return new LinkedList<Integer>(list);
}
List interleaved = new LinkedList<Integer>();
int end = list.size() - 1;
int front = 0;
while (end > front){
interleaved.add(list.get(front++));
interleaved.add(list.get(end--));
}
// if odd sized list need to add last element
if (end == front){
interleaved.add(list.get(front));
}
return interleaved;
}