Сортировка списков

112
03 августа 2019, 11:30
  1. Необходимо из списка чисел составить новый список, состоящий из чисел, которые останутся на своем месте список отсортировать по возрастанию, например:

    { 3, 1, 3, 7, 7, 5, 9, 9, 15, 12, 10 } → { 3, 7, 9, 9, 12 }

самый простой вариант – создать дополнительный список из элементов переданного списка, новый список отсортировать, а затем сравнивать элементы двух списков

package com.company;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> din = new ArrayList<>(5);
        din.add(3);
        din.add(1);
        din.add(3);
        din.add(7);
        din.add(7);
        din.add(5);
        din.add(9);
        din.add(9);
        din.add(15);
        din.add(12);
        din.add(10);
        ArrayList<Integer> din1 = new ArrayList<>(5);
        din1.add(3);
        din1.add(1);
        din1.add(3);
        din1.add(7);
        din1.add(7);
        din1.add(5);
        din1.add(9);
        din1.add(9);
        din1.add(15);
        din1.add(12);
        din1.add(10);
        Collections.sort(din1);
        for(int i = 0; i<=din1.size(); i++){
           if(din.get(i) == din1.get(i)){
               din1.remove(i);
           }
            System.out.print(din1.get(i));
        }
    }
}

Выводит {1,3,5,7,9,9,10,12} ,а не { 3, 7, 9, 9, 12 }

Answer 1

Действия:

  • Создаете копию списка.
  • Сортируете копию
  • Проходите одним циклом по индексами обоих списков и сравниваете элементы
  • Если элементы совпадают, значит свою позицию они не поменяли

Пример:

ArrayList<Integer> dinSorted = new ArrayList<>(din);
Collections.sort(dinSorted);
ArrayList<Integer> items = new ArrayList<>();
for (int i = 0; i < din.size(); i++) {
    Integer value = din.get(i);
    if (value.equals(dinSorted.get(i))) {
        items.add(value);
    }
}
System.out.println(items); // [3, 7, 9, 9, 12]
Answer 2

В-нулевых, i < din1.size().

Во-первых, надо проверять не на равенство, а на неравенство.

А во-вторых, надо идти с конца - после первого удаления индексация двух списков рассинхронизируется.

READ ALSO
Примитив или что-то другое?

Примитив или что-то другое?

В языке программирования Java всё является объектом, исключение составляют примитивыКонтейнером для примитивов являются переменные примитивных...

135
JVM транслятор или интерпретатор?

JVM транслятор или интерпретатор?

JVM транслирует или интерпретирует байт-код в машинный код, который откомпилировал компилятор javac?

138
Сборка JavaFX проекта

Сборка JavaFX проекта

Не удается никак собрать исполняемый жарникСобираю проект как и через project structure - artifact - jar так и через javafx application

107
Java фрагментация кучи OutOfMemory

Java фрагментация кучи OutOfMemory

Есть подозрение, что в приложении происходит фрагментация кучиJVM запускается с параметрами -Xms1g -Xmx2g

116