Вярнуцца звернутым агульны спіс тыпу ў Java

Я раблю некаторыя практыкаванні на абагульненым праграмаванні; ёсць спосаб ўзяць клас, які рэалізуе List і вяртае перавернутую версію гэтага <�жа эм /> класа? Здаецца, што гэта павінна быць магчымым, так як гэта, па меншай меры, прымаючы тэрмін па намінальным кошце, з'яўляецца «абагульненае праграмаванне» з вялікай літары.

Можа быць, выконваючы разварот на месцы? Я таксама разгледзеў Collections.reverse (), але гэта метад нікчэмным.

Вось мая спроба і дэма:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Arrays;

public class ReverseDemo {

public static  List reverse(List list) {
    List reversed = new ArrayList();

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

    return reversed;
}

public static void main(String[] args) {
    LinkedList linkedInt = new LinkedList();
    ArrayList arrayDouble = new ArrayList();

    for (int k = 0; k < 10; k++) {
        double doubleNum = 10*Math.random();
        int intNum = (int) (10*Math.random());
        linkedInt.add(intNum);
        arrayDouble.add(doubleNum);
    }

   //LinkedList demo
    System.out.println(Arrays.toString(linkedInt.toArray()));
    System.out.println(Arrays.toString(reverse(linkedInt).toArray()));
    System.out.println(reverse(linkedInt) instanceof LinkedList<?>); //false

   //ArrayList demo
System.out.println(Arrays.toString(arrayDouble.toArray()));        
System.out.println(Arrays.toString(reverse(arrayDouble).toArray()));          
System.out.println(reverse(arrayDouble) instanceof ArrayList<?>); //true
}
}

Дарэчы, гэта мой першы пост тут, хто-небудзь ведае, што лепшы спосаб размяшчаць код непасрэдна з Eclipse, захоўваючы пры гэтым інтэрвал і водступы адтуль? Я выкарыстаў метад чатыры-прасторы, пазначанага тут, але гэта крыху супярэчліва.

4
На вашым боку пытанне: у той час як яшчэ ў Eclipse, выкарыстоўвайце Tab для водступу больш, чым звычайнае колькасць, а затым проста скапіяваць і ўставіць. Вось як я рабіў гэта з самага пачатку.
дададзена аўтар Marko Topolnik, крыніца

16 адказы

Калі вы хочаце захаваць першапачатковы спіс, вы можаце паспрабаваць выкарыстаць:

originalList.getClass().newInstance()

Гэта не 100% правільнае рашэнне, паколькі гэта можа кінуць, калі зыходны клас не мае канструктара па змаўчанні. Тым не менш, большасць калекцый маюць стандартныя канструктары, якія ствараюць пустыя асобнікі.

2
дададзена

Калі вы хочаце захаваць першапачатковы спіс, вы можаце паспрабаваць выкарыстаць:

originalList.getClass().newInstance()

Гэта не 100% правільнае рашэнне, паколькі гэта можа кінуць, калі зыходны клас не мае канструктара па змаўчанні. Тым не менш, большасць калекцый маюць стандартныя канструктары, якія ствараюць пустыя асобнікі.

2
дададзена

паспрабуйце наступнае

public static  List reverse(List list) {

    List reversed=null;
    try {
        reversed = list.getClass().newInstance();
        Collections.reverse(list);
        reversed.addAll(list);

    } catch (InstantiationException | IllegalAccessException e) {
       //TODO Auto-generated catch block
        e.printStackTrace();
    };

     return reversed;
}
2
дададзена
Гэта не спрацуе, калі зыходны спіс не мае адкрыты канструктар, напрыклад, Arrays.asList (...)
дададзена аўтар splungebob, крыніца

паспрабуйце наступнае

public static  List reverse(List list) {

    List reversed=null;
    try {
        reversed = list.getClass().newInstance();
        Collections.reverse(list);
        reversed.addAll(list);

    } catch (InstantiationException | IllegalAccessException e) {
       //TODO Auto-generated catch block
        e.printStackTrace();
    };

     return reversed;
}
2
дададзена
Гэта не спрацуе, калі зыходны спіс не мае адкрыты канструктар, напрыклад, Arrays.asList (...)
дададзена аўтар splungebob, крыніца

паспрабуйце наступнае

public static  List reverse(List list) {

    List reversed=null;
    try {
        reversed = list.getClass().newInstance();
        Collections.reverse(list);
        reversed.addAll(list);

    } catch (InstantiationException | IllegalAccessException e) {
       //TODO Auto-generated catch block
        e.printStackTrace();
    };

     return reversed;
}
2
дададзена
Гэта не спрацуе, калі зыходны спіс не мае адкрыты канструктар, напрыклад, Arrays.asList (...)
дададзена аўтар splungebob, крыніца

The Guava library has a nice, non-destructive solution to the problem. See Lists.reverse(List).

Яны вызначаюць набор ReverseList класы, якія абгортваюць ўвод List . Адтуль, гэта проста пытанне аб пераводзе ўсіх званкоў (хоць «проста» можа быць прыніжэнне рэчы трохі).

2
дададзена

The Guava library has a nice, non-destructive solution to the problem. See Lists.reverse(List).

Яны вызначаюць набор ReverseList класы, якія абгортваюць ўвод List . Адтуль, гэта проста пытанне аб пераводзе ўсіх званкоў (хоць «проста» можа быць прыніжэнне рэчы трохі).

2
дададзена

The Guava library has a nice, non-destructive solution to the problem. See Lists.reverse(List).

Яны вызначаюць набор ReverseList класы, якія абгортваюць ўвод List . Адтуль, гэта проста пытанне аб пераводзе ўсіх званкоў (хоць «проста» можа быць прыніжэнне рэчы трохі).

2
дададзена

Усе java.util рэалізацыя List з'яўляецца клонируемой, так што вы можаце выкарыстоўваць гэта, але, на жаль, не, не звяртаючыся да рэфлексіі. У той час як на чале адлюстравання, вы можаце таксама выкарыстоўваць капіравальную-канструктар, які таксама насіў зборнікі ўсіх Java.

Там няма цалкам агульнага падыходу да неразбуральнага назад, на жаль.

Разбуральны задні ход, з другога боку, занадта трывіяльны, каб быць цікавымі.

1
дададзена
Вы не маглі б, на самай справе: серыялізацыі, нават калі гэта атрымалася, дасць вам глыбокі клон, які не быў бы жаданы вынік.
дададзена аўтар Marko Topolnik, крыніца
Вельмі было б няправільна. Гэта проста не чаканая Семантыка аперацыі спісу зваротнай. Не кажучы ўжо пра тое, што яна не будзе выканана, калі поўны аб'ект граф, адукаваны ў спісе, усе яго члены, усе іх сябры, і г.д., ўтрымлівае толькі адзін несериализуемый асобнік.
дададзена аўтар Marko Topolnik, крыніца
@newacct я прапаную менавіта гэта, бо выразна паказана ў першым сказе майго адказу. Дзякуй за downvote.
дададзена аўтар Marko Topolnik, крыніца
реверсирование спісу з'яўляецца досыць распаўсюджанай аперацыяй, каб мець чаканы вынік, які ўяўляе сабой спіс, які змяшчае ўсе элементы зыходнага спісу, але ў зваротным парадку. Іншы спосаб выразы гэта чаканне, што зваротны гэта <�я> зварачальным аперацыя: зваротны аб рэверс = ідэнтычнасць .
дададзена аўтар Marko Topolnik, крыніца
«Усе рэалізацыі java.util са спісу з'яўляюцца клонируемыми» Як гэта дапамагае? <�Код> List не мае публічны клон метад. Дык што ж вы прапануеце рабіць? Выкарыстоўвайце адлюстраванне, каб атрымаць метад з пэўнага класа?
дададзена аўтар newacct, крыніца
Акрамя таго, можна кланаваць з дапамогай серыялізацыі
дададзена аўтар splungebob, крыніца
Што было б няправільна з глыбокім клонам? Я не бачыў такога абмежаванні ў АП.
дададзена аўтар splungebob, крыніца
Праўда, мой каментар з нагоды серыялізацыі не было 100% кваліфікаванае (г.зн. усе члены аб'екта графа павінны быць сериализуемыми), які я не адпраўляў яго ў якасці рашэння. Я проста каментуючы іншы спосаб кланавання (супраць адлюстравання). Не маглі б вы растлумачыць ваш каментар Гэта проста не чаканыя Семантыка аперацыі спіс зваротнага , так як я не зусім згодны. OP спрабуе запісаць гэтую аперацыю, так як soomething, што не напісана мець нечаканую семантыку?
дададзена аўтар splungebob, крыніца
Добра, цяпер я бачу. <�Код> Іншым спосаб выразы гэта чаканне, што адваротнае зваротная аперацыя - добрае тлумачэнне.
дададзена аўтар splungebob, крыніца

<�Код> Collections.reverse() можа быць несапраўдным, але гэта толькі таму, што вы павінны перадаць у спіс, каб павярнуць назад.

List myList = ...;
Collections.reverse(myList);

Зараз у вас ёсць перавернуты спіс.

1
дададзена
Толькі гэта разбуральна. Стварэнне неразбуральнага метаду з'яўляецца складанай задачай.
дададзена аўтар Marko Topolnik, крыніца
Праўда, але гэта не падобна, як і Op клапоціцца пра гэта.
дададзена аўтар greedybuddha, крыніца

Гэта падобна на працу:

import java.util.*;

public class ReverseListDemo
{
  public static void main(String[] args)
  {
    List original = Arrays.asList("A", "B", "C");
    List reversal = reverse(original);

    System.out.println("Original: " + original);
    System.out.println("Reversal: " + reversal);
  }

  public static  List reverse(List list)
  {
    T[] objects = (T[]) list.toArray();
    List copy = Arrays.asList(objects);
    Collections.reverse(copy);
    return copy;
  }
}
0
дададзена
<�Код> зваротны тут метад вяртае пэўны тып спісу (ўнутраны клас, які выкарыстоўваецца Arrays.asList() ), а не адзін і той жа клас, што і ўваходны спіс як OP хоча.
дададзена аўтар newacct, крыніца
Я зразумеў патрабаванне. Я думаў, што ОП хацеў яшчэ адзін спіс таго ж тыпу абагульненых.
дададзена аўтар splungebob, крыніца
Дзякуй. Я бачу, што гэты канкрэтны кодавы блок працуе, але калі я паспрабаваў яго, выкарыстоўваючы мой асноўны метад я атрымліваю "хлусьня" пры тэставанні якiя вяртаюцца тыпаў з выкарыстаннем InstanceOf (). Існуе, верагодна, «занадта акадэмічны» прычына для гэтага, ці я прапускаю семантыку InstanceOf (). Дзякуй за канструктыўны каментар.
дададзена аўтар yangmillstheory, крыніца

Гэта падобна на працу:

import java.util.*;

public class ReverseListDemo
{
  public static void main(String[] args)
  {
    List original = Arrays.asList("A", "B", "C");
    List reversal = reverse(original);

    System.out.println("Original: " + original);
    System.out.println("Reversal: " + reversal);
  }

  public static  List reverse(List list)
  {
    T[] objects = (T[]) list.toArray();
    List copy = Arrays.asList(objects);
    Collections.reverse(copy);
    return copy;
  }
}
0
дададзена
<�Код> зваротны тут метад вяртае пэўны тып спісу (ўнутраны клас, які выкарыстоўваецца Arrays.asList() ), а не адзін і той жа клас, што і ўваходны спіс як OP хоча.
дададзена аўтар newacct, крыніца
Я зразумеў патрабаванне. Я думаў, што ОП хацеў яшчэ адзін спіс таго ж тыпу абагульненых.
дададзена аўтар splungebob, крыніца
Дзякуй. Я бачу, што гэты канкрэтны кодавы блок працуе, але калі я паспрабаваў яго, выкарыстоўваючы мой асноўны метад я атрымліваю "хлусьня" пры тэставанні якiя вяртаюцца тыпаў з выкарыстаннем InstanceOf (). Існуе, верагодна, «занадта акадэмічны» прычына для гэтага, ці я прапускаю семантыку InstanceOf (). Дзякуй за канструктыўны каментар.
дададзена аўтар yangmillstheory, крыніца

Гэта падобна на працу:

import java.util.*;

public class ReverseListDemo
{
  public static void main(String[] args)
  {
    List original = Arrays.asList("A", "B", "C");
    List reversal = reverse(original);

    System.out.println("Original: " + original);
    System.out.println("Reversal: " + reversal);
  }

  public static  List reverse(List list)
  {
    T[] objects = (T[]) list.toArray();
    List copy = Arrays.asList(objects);
    Collections.reverse(copy);
    return copy;
  }
}
0
дададзена
<�Код> зваротны тут метад вяртае пэўны тып спісу (ўнутраны клас, які выкарыстоўваецца Arrays.asList() ), а не адзін і той жа клас, што і ўваходны спіс як OP хоча.
дададзена аўтар newacct, крыніца
Я зразумеў патрабаванне. Я думаў, што ОП хацеў яшчэ адзін спіс таго ж тыпу абагульненых.
дададзена аўтар splungebob, крыніца
Дзякуй. Я бачу, што гэты канкрэтны кодавы блок працуе, але калі я паспрабаваў яго, выкарыстоўваючы мой асноўны метад я атрымліваю "хлусьня" пры тэставанні якiя вяртаюцца тыпаў з выкарыстаннем InstanceOf (). Існуе, верагодна, «занадта акадэмічны» прычына для гэтага, ці я прапускаю семантыку InstanceOf (). Дзякуй за канструктыўны каментар.
дададзена аўтар yangmillstheory, крыніца

Дзякуй за адказы ўсім. Я напісаў reverse2 метад, які працуе па меншай меры, для рэалізацыі класаў ArrayList і LinkedList. Не ўпэўнены, наколькі эфектыўна гэта.

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Arrays;

// See http://stackoverflow.com/questions/16799066/return-reversed-generic-list-type-in-java.
public class ReverseDemo {

    public static  List reverse1(List list) {
        List reversed = new ArrayList();

        for (int i = list.size() - 1; i > -1; i--) {
            reversed.add(list.get(i));
          }

        return reversed;
    }

    public static  List reverse2(List list) {
        int size = list.size();

        ArrayList obArray = new ArrayList();
        obArray.addAll(list);

        ListIterator iter = list.listIterator();  
        for (int i = 0; i < size; i++) {
            iter.next();
            iter.set(obArray.get(size - 1 - i));
        }       

        return list;
    }

    public static void main(String[] args) {
        LinkedList linkedInt = new LinkedList();
        ArrayList arrayDouble = new ArrayList();

        for (int k = 0; k < 10; k++) {
            double doubleNum = 10*Math.random();
            int intNum = (int) (10*Math.random());
            linkedInt.add(intNum);
            arrayDouble.add(doubleNum);
        }

        TextIO.putln("Testing reverse1.");

       //LinkedList demo
        System.out.println(Arrays.toString(linkedInt.toArray()));
        System.out.println(Arrays.toString(reverse1(linkedInt).toArray()));
        TextIO.putln("LinkedList structure preserved?");
        System.out.println(reverse1(linkedInt) instanceof LinkedList<?>);

       //ArrayList demo
        System.out.println(Arrays.toString(arrayDouble.toArray()));
        System.out.println(Arrays.toString(reverse1(arrayDouble).toArray()));
        TextIO.putln("ArrayList structure preserved?");
        System.out.println(reverse1(arrayDouble) instanceof ArrayList<?>);

        TextIO.putln("\nTesting reverse2.");

       //LinkedList demo
        System.out.println(Arrays.toString(linkedInt.toArray()));
        System.out.println(Arrays.toString(reverse2(linkedInt).toArray()));
        TextIO.putln("LinkedList structure preserved?");
        System.out.println(reverse2(linkedInt) instanceof LinkedList<?>);

       //ArrayList demo
        System.out.println(Arrays.toString(arrayDouble.toArray()));
        System.out.println(Arrays.toString(reverse2(arrayDouble).toArray()));
        TextIO.putln("ArrayList structure preserved?");
        System.out.println(reverse2(arrayDouble) instanceof ArrayList<?>);
    }

}

вывад на кансоль:

Тэставанне reverse1. [8, 0, 1, 9, 3, 4, 3, 7, 6, 3] [3, 6, 7, 3, 4, 3, 9, 1, 0, 8] Структура LinkedList захавалася? фальшывы [8,301783107294664, 5,434068303620735, 9,095396759542615, ,41823972682620836, 9,56659902304762, 3,2560723280079085, 4,037362000077436, 9,731919590391389, ,5243645318825874, 5,9432185528462975] [5,9432185528462975, ,5243645318825874, 9,731919590391389, 4,037362000077436, 3,2560723280079085, 9,56659902304762, ,41823972682620836, 9,095396759542615, 5,434068303620735, 8,301783107294664] ArrayList структура захавалася? праўда

Тэставанне reverse2. [8, 0, 1, 9, 3, 4, 3, 7, 6, 3] [3, 6, 7, 3, 4, 3, 9, 1, 0, 8] Структура LinkedList захавалася? праўда [8,301783107294664, 5,434068303620735, 9,095396759542615, ,41823972682620836, 9,56659902304762, 3,2560723280079085, 4,037362000077436, 9,731919590391389, ,5243645318825874, 5,9432185528462975] [5,9432185528462975, ,5243645318825874, 9,731919590391389, 4,037362000077436, 3,2560723280079085, 9,56659902304762, ,41823972682620836, 9,095396759542615, 5,434068303620735, 8,301783107294664] ArrayList структура захавалася? праўда

0
дададзена
таму што няма ніякага агульнага спосабу стварыць яшчэ адзін аб'ект таго ж тыпу
дададзена аўтар newacct, крыніца
<�Код> reverse2() разбуральна (ён змяняе зыходны аб'ект спісу). Калі вы збіраецеся зрабіць гэта, чаму б не проста зрабіць грамадскі статычны List reverse2 (List спіс) {Collections.reverse (спіс); вярнуцца спіс; }
дададзена аўтар newacct, крыніца
Вы правільна. Там не было ніякага патрабаванні для таго, неразбуральнымі або разбуральным, але цяпер я бачу, што я зноўку вынаходзіць кола. Вы ведаеце, чаму агульны неразбураючы реверсирования так цяжка дасягнуць?
дададзена аўтар yangmillstheory, крыніца

Дзякуй за адказы ўсім. Я напісаў reverse2 метад, які працуе па меншай меры, для рэалізацыі класаў ArrayList і LinkedList. Не ўпэўнены, наколькі эфектыўна гэта.

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Arrays;

// See http://stackoverflow.com/questions/16799066/return-reversed-generic-list-type-in-java.
public class ReverseDemo {

    public static  List reverse1(List list) {
        List reversed = new ArrayList();

        for (int i = list.size() - 1; i > -1; i--) {
            reversed.add(list.get(i));
          }

        return reversed;
    }

    public static  List reverse2(List list) {
        int size = list.size();

        ArrayList obArray = new ArrayList();
        obArray.addAll(list);

        ListIterator iter = list.listIterator();  
        for (int i = 0; i < size; i++) {
            iter.next();
            iter.set(obArray.get(size - 1 - i));
        }       

        return list;
    }

    public static void main(String[] args) {
        LinkedList linkedInt = new LinkedList();
        ArrayList arrayDouble = new ArrayList();

        for (int k = 0; k < 10; k++) {
            double doubleNum = 10*Math.random();
            int intNum = (int) (10*Math.random());
            linkedInt.add(intNum);
            arrayDouble.add(doubleNum);
        }

        TextIO.putln("Testing reverse1.");

       //LinkedList demo
        System.out.println(Arrays.toString(linkedInt.toArray()));
        System.out.println(Arrays.toString(reverse1(linkedInt).toArray()));
        TextIO.putln("LinkedList structure preserved?");
        System.out.println(reverse1(linkedInt) instanceof LinkedList<?>);

       //ArrayList demo
        System.out.println(Arrays.toString(arrayDouble.toArray()));
        System.out.println(Arrays.toString(reverse1(arrayDouble).toArray()));
        TextIO.putln("ArrayList structure preserved?");
        System.out.println(reverse1(arrayDouble) instanceof ArrayList<?>);

        TextIO.putln("\nTesting reverse2.");

       //LinkedList demo
        System.out.println(Arrays.toString(linkedInt.toArray()));
        System.out.println(Arrays.toString(reverse2(linkedInt).toArray()));
        TextIO.putln("LinkedList structure preserved?");
        System.out.println(reverse2(linkedInt) instanceof LinkedList<?>);

       //ArrayList demo
        System.out.println(Arrays.toString(arrayDouble.toArray()));
        System.out.println(Arrays.toString(reverse2(arrayDouble).toArray()));
        TextIO.putln("ArrayList structure preserved?");
        System.out.println(reverse2(arrayDouble) instanceof ArrayList<?>);
    }

}

вывад на кансоль:

Тэставанне reverse1. [8, 0, 1, 9, 3, 4, 3, 7, 6, 3] [3, 6, 7, 3, 4, 3, 9, 1, 0, 8] Структура LinkedList захавалася? фальшывы [8,301783107294664, 5,434068303620735, 9,095396759542615, ,41823972682620836, 9,56659902304762, 3,2560723280079085, 4,037362000077436, 9,731919590391389, ,5243645318825874, 5,9432185528462975] [5,9432185528462975, ,5243645318825874, 9,731919590391389, 4,037362000077436, 3,2560723280079085, 9,56659902304762, ,41823972682620836, 9,095396759542615, 5,434068303620735, 8,301783107294664] ArrayList структура захавалася? праўда

Тэставанне reverse2. [8, 0, 1, 9, 3, 4, 3, 7, 6, 3] [3, 6, 7, 3, 4, 3, 9, 1, 0, 8] Структура LinkedList захавалася? праўда [8,301783107294664, 5,434068303620735, 9,095396759542615, ,41823972682620836, 9,56659902304762, 3,2560723280079085, 4,037362000077436, 9,731919590391389, ,5243645318825874, 5,9432185528462975] [5,9432185528462975, ,5243645318825874, 9,731919590391389, 4,037362000077436, 3,2560723280079085, 9,56659902304762, ,41823972682620836, 9,095396759542615, 5,434068303620735, 8,301783107294664] ArrayList структура захавалася? праўда

0
дададзена
таму што няма ніякага агульнага спосабу стварыць яшчэ адзін аб'ект таго ж тыпу
дададзена аўтар newacct, крыніца
<�Код> reverse2() разбуральна (ён змяняе зыходны аб'ект спісу). Калі вы збіраецеся зрабіць гэта, чаму б не проста зрабіць грамадскі статычны List reverse2 (List спіс) {Collections.reverse (спіс); вярнуцца спіс; }
дададзена аўтар newacct, крыніца
Вы правільна. Там не было ніякага патрабаванні для таго, неразбуральнымі або разбуральным, але цяпер я бачу, што я зноўку вынаходзіць кола. Вы ведаеце, чаму агульны неразбураючы реверсирования так цяжка дасягнуць?
дададзена аўтар yangmillstheory, крыніца

Дзякуй за адказы ўсім. Я напісаў reverse2 метад, які працуе па меншай меры, для рэалізацыі класаў ArrayList і LinkedList. Не ўпэўнены, наколькі эфектыўна гэта.

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Arrays;

// See http://stackoverflow.com/questions/16799066/return-reversed-generic-list-type-in-java.
public class ReverseDemo {

    public static  List reverse1(List list) {
        List reversed = new ArrayList();

        for (int i = list.size() - 1; i > -1; i--) {
            reversed.add(list.get(i));
          }

        return reversed;
    }

    public static  List reverse2(List list) {
        int size = list.size();

        ArrayList obArray = new ArrayList();
        obArray.addAll(list);

        ListIterator iter = list.listIterator();  
        for (int i = 0; i < size; i++) {
            iter.next();
            iter.set(obArray.get(size - 1 - i));
        }       

        return list;
    }

    public static void main(String[] args) {
        LinkedList linkedInt = new LinkedList();
        ArrayList arrayDouble = new ArrayList();

        for (int k = 0; k < 10; k++) {
            double doubleNum = 10*Math.random();
            int intNum = (int) (10*Math.random());
            linkedInt.add(intNum);
            arrayDouble.add(doubleNum);
        }

        TextIO.putln("Testing reverse1.");

       //LinkedList demo
        System.out.println(Arrays.toString(linkedInt.toArray()));
        System.out.println(Arrays.toString(reverse1(linkedInt).toArray()));
        TextIO.putln("LinkedList structure preserved?");
        System.out.println(reverse1(linkedInt) instanceof LinkedList<?>);

       //ArrayList demo
        System.out.println(Arrays.toString(arrayDouble.toArray()));
        System.out.println(Arrays.toString(reverse1(arrayDouble).toArray()));
        TextIO.putln("ArrayList structure preserved?");
        System.out.println(reverse1(arrayDouble) instanceof ArrayList<?>);

        TextIO.putln("\nTesting reverse2.");

       //LinkedList demo
        System.out.println(Arrays.toString(linkedInt.toArray()));
        System.out.println(Arrays.toString(reverse2(linkedInt).toArray()));
        TextIO.putln("LinkedList structure preserved?");
        System.out.println(reverse2(linkedInt) instanceof LinkedList<?>);

       //ArrayList demo
        System.out.println(Arrays.toString(arrayDouble.toArray()));
        System.out.println(Arrays.toString(reverse2(arrayDouble).toArray()));
        TextIO.putln("ArrayList structure preserved?");
        System.out.println(reverse2(arrayDouble) instanceof ArrayList<?>);
    }

}

вывад на кансоль:

Тэставанне reverse1. [8, 0, 1, 9, 3, 4, 3, 7, 6, 3] [3, 6, 7, 3, 4, 3, 9, 1, 0, 8] Структура LinkedList захавалася? фальшывы [8,301783107294664, 5,434068303620735, 9,095396759542615, ,41823972682620836, 9,56659902304762, 3,2560723280079085, 4,037362000077436, 9,731919590391389, ,5243645318825874, 5,9432185528462975] [5,9432185528462975, ,5243645318825874, 9,731919590391389, 4,037362000077436, 3,2560723280079085, 9,56659902304762, ,41823972682620836, 9,095396759542615, 5,434068303620735, 8,301783107294664] ArrayList структура захавалася? праўда

Тэставанне reverse2. [8, 0, 1, 9, 3, 4, 3, 7, 6, 3] [3, 6, 7, 3, 4, 3, 9, 1, 0, 8] Структура LinkedList захавалася? праўда [8,301783107294664, 5,434068303620735, 9,095396759542615, ,41823972682620836, 9,56659902304762, 3,2560723280079085, 4,037362000077436, 9,731919590391389, ,5243645318825874, 5,9432185528462975] [5,9432185528462975, ,5243645318825874, 9,731919590391389, 4,037362000077436, 3,2560723280079085, 9,56659902304762, ,41823972682620836, 9,095396759542615, 5,434068303620735, 8,301783107294664] ArrayList структура захавалася? праўда

0
дададзена
таму што няма ніякага агульнага спосабу стварыць яшчэ адзін аб'ект таго ж тыпу
дададзена аўтар newacct, крыніца
<�Код> reverse2() разбуральна (ён змяняе зыходны аб'ект спісу). Калі вы збіраецеся зрабіць гэта, чаму б не проста зрабіць грамадскі статычны List reverse2 (List спіс) {Collections.reverse (спіс); вярнуцца спіс; }
дададзена аўтар newacct, крыніца
Вы правільна. Там не было ніякага патрабаванні для таго, неразбуральнымі або разбуральным, але цяпер я бачу, што я зноўку вынаходзіць кола. Вы ведаеце, чаму агульны неразбураючы реверсирования так цяжка дасягнуць?
дададзена аўтар yangmillstheory, крыніца