Java: сортировка Arraylist со связанным массивом - PullRequest
2 голосов
/ 14 июля 2011

Я использую Java, пытаясь создать программу.

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

Например, здесь возможная ситуация:

String[] array = {"U R F", "B' F2", "L' D"}  
arraylist<Double> = {"2.03", "4.32", "1.23"}

(Я знаю, что arraylist не инициализируется так, как я сделал это для простоты)

Что я хочу закончить, так это:

String[] array = {"L' D", "U R F", "B' F2"}  
arraylist<Double> = {"1.23", "2.03", "4.32"}

С отсортированным массивом и массивом arraylistпо количественной оценке.

Ответы [ 4 ]

4 голосов
/ 14 июля 2011

Я предлагаю вам создать бин с 2 полями, значение одного поля исходит из вашего массива String, а значение другого поля - из вашего ArrayList. Добавьте объекты Bean в объект Collection и выполните сортировку.

3 голосов
/ 14 июля 2011

Пока ваш сопутствующий массив содержит уникальные значения, вы можете создать SortedMap, пары ключ-значение которого составлены из ArrayList и Array соответственно.Считайте значения SortedMap по порядку в результирующий массив.

Вот полный пример:

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

/**
 * Not great code; it just illustrates an idea.
 */
public class SortExample {

    /**
     * Shows how to sort an array based on the way a "companion" list
     * would sort.  <strong>ASSUMPTION</strong>: The values in the companion
     * list must be unique!
     */
    public static void main(String[] args) {

        String[] names = {"two", "seven", "six", "eight", "one"};
        List<Integer> numbers = Arrays.asList(2, 7, 6, 8, 1);

        // Note: This only works if names and numbers are the same size....
        SortedMap<Integer, String> pairs = new TreeMap<Integer, String>();
        for (int i = 0; i < names.length; i++) {
            pairs.put(numbers.get(i), names[i]);
        }

        // Note: This destroys the original array
        int i = 0;
        for (Map.Entry<Integer, String> e : pairs.entrySet()) {
            names[i++] = e.getValue();
        }

        System.out.println(Arrays.toString(names));
    }
}
0 голосов
/ 14 июля 2011

Если вы хорошо разбираетесь в типах сохранения данных, я предлагаю вам использовать map. Но это может быть немного сложнее, поэтому сделайте копию массива с номерами. Сортируйте один из них, а другой должен остаться оригинальным. После этого найдите каждое число в новом месте в отсортированном списке и сохраните число в массиве int. На последнем шаге инициализируйте новый список массива и добавьте каждый элемент к их новым местам в массиве. Надеюсь, это поможет, удачи.

0 голосов
/ 14 июля 2011

Если вы знаете, как сортировать, в чем проблема?используйте алгоритм сортировки по вашему выбору, и когда (после сравнения) вы меняете местами элементы массива, вам просто нужно поменять местами соответствующие элементы массива

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