Кажется, есть небольшая путаница в том, как работают связанные списки. По сути, связанный список состоит из узлов, каждый из которых содержит один элемент данных (точнее, сам объект, который может содержать несколько переменных-членов) и ссылку на следующий узел в списке (или нулевой указатель, если существует). нет такого следующего узла). Вы также можете иметь двусвязный список, где каждый узел также имеет указатель на предыдущий узел в списке, чтобы ускорить определенные виды шаблонов доступа.
Добавление нескольких «фрагментов данных» к одному узлу звучит как добавление нескольких ссылок с одного узла, что превращает ваш связанный список в N-арное дерево .
Чтобы добавить несколько частей данных в конец списка, способом, наиболее часто связанным со связанным списком, просто выполните:
LinkedList <Integer>linky = new LinkedList<Integer>();
int num1 = 2, num2 = 22, num3 = 25, num4 = 1337;
linky.add(num1);
linky.add(num2);
linky.add(num3);
linky.add(num4);
В качестве альтернативы, если вы хотите, чтобы каждый узел связанного списка имел несколько частей данных
Эти данные должны быть упакованы в объект (путем определения class
, в котором все они являются переменными-членами). Например:
class GroupOfFourInts
{
int myInt1;
int myInt2;
int myInt3;
int myInt4;
public GroupOfFourInts(int a, int b, int c, int d)
{
myInt1 = a; myInt2 = b; myInt3 = c; myInt4 = d;
}
}
class someOtherClass
{
public static void main(String[] args)
{
LinkedList<GroupOfFourInts> linky = new LinkedList<GroupOfFourInts>();
GroupOfFourInts group1 = new GroupOfFourInts(1,2,3,4);
GroupOfFourInts group2 = new GroupOfFourInts(1337,7331,2345,6789);
linky.add(group1);
linky.add(group2);
}
}
Теперь linky
будет иметь 2 узла, каждый из которых будет содержать 4 int
s, myInt1 , myInt2 , myInt3 и myInt4 .
Примечание
Ничто из вышеперечисленного не относится к связанным спискам. Этот шаблон следует использовать всякий раз, когда вы хотите хранить кучу данных вместе как единое целое. Вы создаете класс, который имеет переменные-члены для каждой части данных, которые вы хотите сохранить вместе, а затем создаете любой тип коллекций Java (ArrayList, LinkedList, TreeList, ...) этого типа.
Убедитесь, что вы хотите использовать связанный список (поскольку с точки зрения сложности программирования при выборе ArrayList или TreeList нет штрафов). Это будет зависеть от вашей схемы доступа к данным. Связанные списки обеспечивают O (1) добавление и удаление, но O (n) поиск, тогда как ArrayLists обеспечивают O (1) поиск, но O (n) произвольное добавление и удаление. TreeLists обеспечивают вставку, удаление и поиск O (log n). Компромисс между ними зависит от объема данных, которые у вас есть, и от того, как вы собираетесь изменять и получать доступ к структуре данных.
Конечно, все это не имеет значения, если в вашем списке будет, скажем, <100 элементов; -) </p>
Надеюсь, это поможет!