关于链表的工作方式似乎有点混乱。本质上,链表由节点组成,每个节点都包含一个数据(一个对象,准确地说,它本身可以包含多个成员变量),以及指向链表中下一个节点的链接(如果存在则为空指针)是没有这样的下一个节点)。您还可以有一个双向链表,其中每个节点还有一个指向列表中前一个节点的指针,以加速某些类型的访问模式。
将多个“数据片段”添加到单个节点听起来就像从一个节点添加多个链接,这会将您的链接列表变成 N-ary tree。
要将多条数据添加到列表的末尾,以最常与链表关联的方式,只需执行以下操作:
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
,myInt1,myInt2,myInt3和myInt4。
笔记
以上都不是链表特有的。每当您想将一堆数据作为一个单元存储在一起时,都应该使用这种模式。您创建一个类,其中包含要存储在一起的每条数据的成员变量,然后创建该类型的任何 Java 集合类型(ArrayList、LinkedList、TreeList...)。
确保您要使用链表(因为在选择 ArrayList 或 TreeList 时不会因编程困难而受到惩罚)。这将取决于您的数据访问模式。链表提供 O(1) 添加和删除,但 O(n) 查找,而 ArrayList 提供 O(1) 查找,但 O(n) 任意添加和删除。TreeLists 提供 O(log n) 的插入、删除和查找。这些之间的权衡取决于您拥有的数据量以及您将如何修改和访问数据结构。
当然,如果您的列表中只有 <100 个元素,这些都不重要;-)
希望这可以帮助!