Как я могу использовать связанные списки для Java?

StackOverflow https://stackoverflow.com/questions/1414341

  •  06-07-2019
  •  | 
  •  

Вопрос

Мне нужно использовать LinkedList, чтобы добавить ячейки тюрьмы с номерами ячеек 1.1, 1.2, 1.3, 1.4 и т. д. Есть два уровня, и ячейки с нечетными номерами имеют 1 ячейку, тогда как ячейки с четными номерами имеют 2 ячейки. Как я могу это сделать?

Я сделал это, чтобы создать связанный список. Это в моем классе Cells, и у меня есть 2 дочерних класса, которые наследуются от класса Cells, называемого Odd и Even для нечетных и четных ячеек. Размещать ли все ячейки в классе ячеек или только нечетные в нечетном классе, а четные - в четном классе?

LinkedList<Cells> cellId = new LinkedList<Cells>();
public void add()
{}

Я не уверен, что нужно добавить в метод add.

Это было полезно?

Решение

Исходя из моего комментария выше, приведен пример того, как вы можете реализовать его с использованием массивов, если вы определили константы LEVELS и CELLS_PER_LEVEL в своем основном классе (т. е. с помощью " private static final " ;):

Cell[][] cells = new Cell[LEVELS+1][];
for(int level = 1; level <= LEVELS; level++) {
    cells[level] = new Cell[CELLS_PER_LEVEL+1];
}

Конечно, все клетки сами по себе равны нулю. Вам нужно инициализировать их как OddCell или EvenCell. Например, чтобы создать ячейку 1.5:

cells[1][5] = new OddCell();

Конечно, массивы на самом деле нумеруются с нуля, но поскольку ячейки нумеруются с одного, проще всего игнорировать эти элементы. Ячейки [0] остаются нулевыми, поскольку " уровень 0 " ;. Аналогично, ячейки [1] [0] можно оставить равными нулю, поскольку ячейка 1.0 отсутствует.

Массивы - хороший выбор, если количество ячеек никогда не меняется. С другой стороны, если вам нужно динамически добавлять ячейки или даже уровни, выберите вместо этого ArrayList. Синтаксис не такой дружелюбный. Например, если у вас есть переменные ячейки типа ArrayList & Lt; ArrayList & Lt; Cell & Gt; & Gt ;, то для присвоения ячейке 1.5 необходимо написать:

cells.get(1).set(5, new OddCell());

В любом случае, в зависимости от того, используете ли вы массивы, списки массивов или что-то еще, ваше решение зависит от общей программы.

Другие советы

Наличие классов Odd и Even, которые являются подклассами Cell, звучит для меня очень неправильно. Скорее, класс Cell должен иметь свойство Number и такой метод, как isOdd() и / или isEven().

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

Вы можете сделать это так, как хотите, и просто добавить ячейки в список (без расширения списка). Что-то вроде:

public class Cell {
    // all the internal logic
}
public class EvenCell extends Cell {}
public class OddCell extends Cell {}

LinkedList<Cell> cells = new LinkedList<Cell>();
cells.add(new OddCell());
cells.add(new EvenCell());
// ...

Затем позже используйте что-то вроде instanceof, чтобы определить, является ли ячейка четной или нечетной.

Cell c = cells.get(1);
if (c instanceof EvenCell) {
    // ...
} else {
    // ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top