我需要从第一个元素参数的第一次出现开始,到第二个参数的下一次出现结束,并将它们以相反的顺序放置。

即:

ArrayList<String> food


tomato cheese chips fruit pie butter tea buns

而两个参数是chipsbuns

新的ArrayList应该是

buns tea butter pie fruit chips

这就是我所拥有的,但是在打印时,arraylist为空

public static void main (String[] args){

       ArrayList<String> food = new ArrayList<String>();
       food.add(new String("tomato"));
       food.add(new String("cheese"));
       food.add(new String("chips"));
       food.add(new String("fruit"));
       food.add(new String("pie"));
       food.add(new String("butter"));
       food.add(new String("tea"));
       food.add(new String("buns"));

       ArrayList<String> f1 = reverseOrder(food,"chips","buns");

    }

    public static ArrayList<String> reverseOrder(ArrayList<String> a, String w1, String w2){

        ArrayList<String> food = new ArrayList<String>();

        int startingPos = 0;
        int endingPos = 0;

        boolean startAdding = false;

        for(int i=0; i<a.size(); i++){
            String n = a.get(i);

            if(n.equals(w1)){
                endingPos = i;
            }

            if(n.equals(w2)){
                startingPos = i;
            }

        }


        for(int j = startingPos; j<=endingPos; j--){
            String p = a.get(j);
            food.add(p);
        }


        System.out.print(food);

        return food;
    }

最佳答案

您要解决的问题实际上是两个。首先,您需要确定您关心的范围(指标)。然后执行相反的操作。

您有第一部分。第二部分可以通过重复删除和插入值来完成,但是我建议改用交换。

ArrayList l;
int begin, end;
//reverse everything from "begin" to "end".
while(begin<end){
    Object tmp = l.get(begin);
    l.set(begin, l.get(end));
    l.set(end, tmp);
    begin++;end--;
}


您还应该知道Java集合已经为您提供了一种简单的方法来反转列表。

Collections.reverse(list);


另外,如果您需要其他列表,而又不像以前那样修改原始列表,则可以抓取这样的子列表。

list.subList(fromIndex, toIndex)


这样,您可以结合以上内容轻松执行任务。

关于java - ArrayList以相反的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40117746/

10-10 10:54