java 通过表名获取实体对象_链表


链表相比于前几个章节讲的数据结构而言,是一个真正的动态数据结构也是一个最简单的动态数据结构,我们在后面还会接触更多的动态数据结构,所以对链表有一个理解非常好的基础,就能够更加容易的学习后面更加复杂的数据结构。

首先我们了解一下什么是链表,链表将数据存储在一种单独的数据结构中,这个结构通常叫做“节点”,对于链表来说,节点通常只有两部分内容,e:存储的数据,next:链表中的节点通过next指向下一个节点,就像一个火车一样,一个节点就好比一个车厢,车厢里存储真正的数据,车厢和车厢之间还需要连接,使数据都整合在一起。


java 通过表名获取实体对象_链表_02


public


假设我们有个节点,里面的数据为1,它指向了一个数据为2节点,数据为2的节点指向了数据为3的节点,如果一个节点的next指向了null,说明这个节点就是最后一个节点,这个就是链表。


java 通过表名获取实体对象_链表_03


知道了链表这种数据结构,自然要知道对于这个数据结构的一些操作,我们来看下链表中的增删改查吧

在链表头部添加元素

为了能够在链表头部添加元素,我们就需要先维护一个叫head的节点来作为链表的头部,往头部添加元素只需要将节点的next指向head,然后将head替换成添加到头部的node即可


java 通过表名获取实体对象_链表_04


public


在链表指定元素后面添加元素

在链表中间添加元素,我们先要把新的节点的next指向指定节点后面的一个节点( 新节点.next = 指定节点.next ),然后将指定节点的next指向新节点即可( 指定节点.next = 新节点 ),注意先后顺序


java 通过表名获取实体对象_java 通过表名获取实体对象_05


package


有了在链表指定元素后面添加元素的方法后,在尾部添加方法就很简单了,只需要调用add方法index传入的参数为size即可


public


但是,addFirst方法的逻辑和在链表其他位置添加元素的逻辑不同,因为我们在调用add方法添加元素的时候,是通过遍历到待添加位置的前一个节点进行添加操作,由于链表头是第一个节点,没有前一个节点,也就没办法调用add方法在链表头中插入元素,为了能够让代码更加优雅,在链表中有个非常实用的方法来统一add的操作,就是在链表头部定义一个空节点作为头部节点称之为虚拟节点(dummyHead),这个虚拟节点不储存任何数据,这样一来第一个元素就是dummyHead的next所对应的元素了,addFirst方法也自然可以复用add方法了。


java 通过表名获取实体对象_java 通过表名获取实体对象_06


下面“ * ”标记了修改了的代码


public


有了上面add操作的遍历思路,我们可以写出根据索引查询某个元素,修改指定索引的元素,查询是否包含某个元素,以及链表的toString方法


public


只剩下最后一个删除操作了,想要删除链表中指定的元素,首先要通过遍历找到要删除元素(delNode)的前一个元素(prev),将prev的next指向delNode的next的节点,然后将delNode的next指向null,让GC回收这个空间


java 通过表名获取实体对象_数据结构_07


public


写个测试用例跑下代码


public


输出结果


LinkedList      Size:7
6 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> Null
是否存在2: true
是否存在7: false
LinkedList      Size:7
6 -> 1 -> 2 -> 3 -> 10 -> 5 -> 6 -> Null
获取索引为4的元素: 10
LinkedList      Size:7
6 -> 1 -> 2 -> 3 -> 10 -> 5 -> 6 -> Null
===================================
删除最后一个元素: 6
LinkedList      Size:6
6 -> 1 -> 2 -> 3 -> 10 -> 5 -> Null
===================================
删除第一个元素: 6
LinkedList      Size:5
1 -> 2 -> 3 -> 10 -> 5 -> Null