Как мне поменять два архива в JAVA? - PullRequest
4 голосов
/ 28 февраля 2012

Существует два ArrayList, например, list1 = {1,2,3} и list2 = {7,6,4,2} Как поменять местами эти два списка.Таким образом, результат будет list1 = {7,6,4,2} и list2 = {1,2,3} Могу ли я реализовать так:

public void swapList(ArrayList<Integer> list1, ArrayList<Integer> list2){
    ArrayList<Integer> tmpList = list1;
    list1 = list2;
    list2 = tmpList;
}

Ответы [ 5 ]

12 голосов
/ 28 февраля 2012

Нет, вы не можете реализовать это так. То же самое с массивами. Проблема передачи по значению, как уже объяснили другие.

Если вы хотите, чтобы списки обменивались содержимым , вам нужно очистить и скопировать:

public static void swapList(List<Integer> list1, List<Integer> list2){
    List<Integer> tmpList = new ArrayList<Integer>(list1);
    list1.clear();
    list1.addAll(list2);
    list2.clear();
    list2.addAll(tmpList);
}

Некоторые дополнительные мысли:

List<Integer> list1 = getList1Magic();
List<Integer> list2 = getList2Magic();

if (isSwapReferences()) {
  // this does not affect the actual lists
  List<Integer> temp = list2;
  list2 = list1;
  list1 = temp;
} else if (isSwapListContent()) {
  // this modifies the lists
  swapList(list1, list2);  // method from above
}

Стратегия обмена зависит от ваших требований. Первый блок имеет локальный эффект, второй блок - глобальный.

4 голосов
/ 28 февраля 2012

Проблема с вашим решением заключается в том, что Java является языком передачи по значению .Поэтому любое изменение переменных list1 и list2 не окажет влияния вне метода, но если этого нет в методе, тогда все в порядке.

Еще две вещи:

  1. Вы, вероятно, имели в виду list2 = tmpList;, а не list2 = list1;.
  2. Вы не можете использовать универсальный с примитивами, должно быть List<Integer>.
2 голосов
/ 28 февраля 2012

Вы не можете сделать это в функции из-за Java передается только по значению .И вы не можете создать список целых чисел, вы можете создать список целых чисел.

Вы можете попробовать это, чтобы убедиться, что он не работает:

public static void main(String... args) throws Exception {
    List<Integer> list1 = Arrays.asList(1, 2, 3);
    List<Integer> list2 = Arrays.asList(4, 5, 6);
    System.out.println(list1); //prints 1, 2, 3
    swapList(list1, list2);
    System.out.println(list1); //prints 1, 2, 3
}

public static void swapList(List<Integer> list1, List<Integer> list2){
    List<Integer> tmpList = list1;
    list1 = list2;
    list2 = tmpList;
}
0 голосов
/ 01 октября 2012

Вы можете использовать метод обмена из Коллекции:

Collections.swap(Integer, list1, list2);
0 голосов
/ 28 февраля 2012

Незначительная коррекция в вашем подходе:

    ArrayList<Integer> tmpList = list1;
    list1 = list2;
    list2 = tmpList;

Но вы не можете сделать это так, как вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...