Java: заполнение двух векторов и их сортировка - PullRequest
0 голосов
/ 27 апреля 2009

Как мне заполнить два вектора и объединить их друг с другом (индекс или тип объекта в классе). Я предполагаю, что если я использую индекс для их объединения, то сортировка может быть обработана с помощью Collections.sort, в противном случае мне нужно создать компаратор.

Мы должны кодировать до соглашения Java 1.4.

чтобы ваше воображение было легче; это сетка, которая имеет вектор сортировки (строки) и вектор содержимого (со всеми столбцами). Их нужно заполнить вектором и отсортировать.

Контекст: у меня есть GridBagLayout, содержащий все компоненты в странном порядке. Мне нужно перебрать все компоненты и заполнить их в правильном порядке сетки (gridx, gridy). Для этого решения я подумал о двух векторах, один из которых определяет строку и указывает на вектор, содержащий его столбцы. Либо сортировка будет разрешена при заполнении вектора, либо мне придется отсортировать его на втором шаге. Я думаю, для Java 4 нет другого подхода, кроме двух векторов, содержащих объект, верно?

Ответы [ 2 ]

1 голос
/ 27 апреля 2009

Решение OO состоит в том, чтобы обернуть объекты в обоих векторах во что-то, что реализует сравнение и сохраняет указатель на реальный объект. Таким образом, вы можете сортировать оба вектора независимо друг от друга и использовать обертку, чтобы получить реальный объект.

Это шаблон проектирования "Декоратор".

0 голосов
/ 27 апреля 2009

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

Предполагая, что это то, что вы пытаетесь сделать, вот как я бы это сделал:

public class ThisHadBetterNotBeAHomeworkAssignmentYoungMan {

    public Vector orderContent(Vector indices, Vector content) {
       Object[] orderedStuff = new Object[content.size()];
       for( int i=0; i < indices.size(); i++ ) {
          orderedStuff[i] = content.get(((Integer)indices[i]).intVal());
       }
       return new Vector(orderedStuff);
    }
}

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

// заметьте также, что я не совсем точно понимаю, о чем вы спрашиваете, и могу ошибаться.

...