[Java] एक ArrayList रिवर्स करने के लिए सबसे सरल तरीका क्या है?


Answers

सबसे आसान तरीका नहीं है लेकिन यदि आप रिकर्सन के प्रशंसक हैं तो आपको ArrayList को उलट करने के लिए निम्न विधि में रुचि हो सकती है:

public ArrayList<Object> reverse(ArrayList<Object> list) {
    if(list.size() > 1) {                   
        Object value = list.remove(0);
        reverse(list);
        list.add(value);
    }
    return list;
}

या गैर-पुनरावर्ती:

public ArrayList<Object> reverse(ArrayList<Object> list) {
    for(int i = 0, j = list.size() - 1; i < j; i++) {
        list.add(i, list.remove(j));
    }
    return list;
}
Question

इस ऐरेलिस्ट को रिवर्स करने का सबसे आसान तरीका क्या है?

ArrayList aList = new ArrayList();

//Add elements to ArrayList object
aList.add("1");
aList.add("2");
aList.add("3");
aList.add("4");
aList.add("5");

while (aList.listIterator().hasPrevious())
  Log.d("reverse", "" + aList.listIterator().previous());



बस अगर हम जावा 8 का उपयोग कर रहे हैं, तो हम स्ट्रीम का उपयोग कर सकते हैं। ArrayList यादृच्छिक अभिगम सूची है और हम विपरीत क्रम में तत्वों की एक धारा प्राप्त कर सकते हैं और फिर इसे एक नए ArrayList में एकत्रित कर ArrayList

public static void main(String[] args) {
        ArrayList<String> someDummyList = getDummyList();
        System.out.println(someDummyList);
        int size = someDummyList.size() - 1;
        ArrayList<String> someDummyListRev = IntStream.rangeClosed(0,size).mapToObj(i->someDummyList.get(size-i)).collect(Collectors.toCollection(ArrayList::new));
        System.out.println(someDummyListRev);
    }

    private static ArrayList<String> getDummyList() {
        ArrayList dummyList = new ArrayList();
        //Add elements to ArrayList object
        dummyList.add("A");
        dummyList.add("B");
        dummyList.add("C");
        dummyList.add("D");
        return dummyList;
    }

उपर्युक्त दृष्टिकोण LinkedList के लिए उपयुक्त नहीं है क्योंकि यह यादृच्छिक-पहुंच नहीं है। हम भी जांच के instanceof का उपयोग कर सकते हैं।




थोड़ा और पठनीय :)

public static <T> ArrayList<T> reverse(ArrayList<T> list) {
    int length = list.size();
    ArrayList<T> result = new ArrayList<T>(length);

    for (int i = length - 1; i >= 0; i--) {
        result.add(list.get(i));
    }

    return result;
}



अतिरिक्त ArrayList या add ​​() के संयोजन और हटाएं () विधियों का उपयोग किए बिना समाधान। यदि आपको एक बड़ी सूची को उलटना है तो दोनों का नकारात्मक प्रभाव हो सकता है।

 public ArrayList<Object> reverse(ArrayList<Object> list) {

    for (int i = 0; i < list.size() / 2; i++) {
        Object temp = list.get(i);
        list.set(i, list.get(list.size() - i - 1));
        list.set(list.size() - i - 1, temp);
 }