Сортировка Loop в Java - PullRequest
       10

Сортировка Loop в Java

1 голос
/ 11 января 2011

Существует список объектов, которые мне нужно добавить в сетку без получения IndexOutOfBoundsException.Каждый объект имеет два числа, связанных с ним, что соответствует его положению index и column в сетке.Может быть 3 столбца и неограниченное количество строк.Мне нужно вызвать add() метод для этой сетки, но только в правильном порядке, поэтому:

(0,0), (0,1), (0,2), (1,0)...

Таким образом, сетка будет выглядеть так:

  0 1 2
0 x x x
1 x x x
2 x x x
3 x x x

Я также должен учитывать вероятность того, что для определенной позиции не существует объекта.Например:

A) x x x  B) x   x   C) x x x
   x x x     x   x        x x
   x   x         x        x
   x   x         x        x
   x   x

Можно ли это сделать?Я не уверен, с чего начать.

Ответы [ 3 ]

3 голосов
/ 11 января 2011

Что вам нужно, это, вероятно, реализация разреженной матрицы .

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

Map<Point, T> grid = new HashMap<Point, T>();
grid.put(new Point(5, 2), myObj);

Point - это реализуемый вами класс, содержащий поля column и index, с правильно реализованными hashCode() и equals().Или, если вы действительно ленивы, вы можете взломать его, используя java.awt.Point.

. Вы можете инкапсулировать это в интерфейсе, аналогичном предложенному @sblundy.Я бы предложил что-то вроде этого:

public interface Grid<T> {
   public T set(int column, int index, T val);
   public T get(int column, int index);
   //other optional methods
}
3 голосов
/ 11 января 2011

Возможно, вам следует подумать о другой структуре данных, в которой хранятся объекты (строка, столбец). Это интерфейс будет выглядеть как

public interface GridModel {
  void set(int row, int column, Object o);
  Object get(int row, int column)
}

А потом вы можете использовать список списков для хранения данных. List<List<Object>> или, как предполагает Марк Петерс , разреженная матрица

Если работа со значениями ячейки важна, добавьте метод итератора ячейки. Простая реализация будет выглядеть так:

public Iterable<Object> cellIterator() {
    final List<Object> items = new java.util.ArrayList<Object>();
    for(final List<Object> row : cells) {
        for(final Object cell: row) {
            items.add(cell);
        }
    }
    return items;
}
0 голосов
/ 11 января 2011

Ответ на этот вопрос может помочь.

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