反转和组合列表

时间:2016-10-12 15:05:49

标签: java loops iterator set

我有以下列表:

  

清单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
    }
}

5 个答案:

答案 0 :(得分:1)

简单的Algo将是

1。)只使用两个位置,i =0表示增量,j = size-1表示减量

2。)在遍历内容列表中间时,使用ij位置将元素添加到新列表中

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;
}