java怎么把链表里面的数据取出来_Java实现链表中元素的获取、查询和修改方法详解...

本文实例讲述了Java实现链表中元素的获取、查询和修改方法。分享给大家供大家参考,具体如下:

本节是在上一小节Java链表中添加元素的基础上继续完善我们的链表相关方法的编写,在本节中我们着重对如何获取链表中元素、查询元素以及修改元素进行学习。

一、获取元素

1.关于获取链表中元素的方法的分析

由于我们使用了虚拟头结点,而我们每次都需要从第一个真实节点开始,因此需要首先得到虚拟头结点的下一个节点是谁,然后在此基础上进行遍历工作,相关代码如下:

//获取链表的第index(0-based)个位置的元素 (实际不常用,练习用)

public E get(int index) {

//合法性判断

if (index < 0 || index >= size) {

throw new IllegalArgumentException("Get failed,Illegal index");

}

Node cur = dummyHead.next;

for (int i = 0; i < index; i++) {

cur = cur.next;

}

return cur.e;

}

2.获得链表的第一个元素

对于该方法则是依靠在get()方法的。

//获得链表的第一个元素

public E getFirst() {

return get(0);

}

3.获得链表的最后一个元素

对于该方法页是依靠在get()方法的。

//获得链表的最后一个元素

public E getLast() {

return get(size - 1);

}

二、修改链表元素

由于我们使用了虚拟头结点,而我们每次都需要从第一个真实节点开始,因此需要首先得到虚拟头结点的下一个节点是谁,然后在此基础上进行遍历工作,相关代码如下:

//修改链表的第index(0-based)个位置的元素 (实际不常用,练习用)

public void set(int index, E e) {

//合法性判断

if (index < 0 || index >= size) {

throw new IllegalArgumentException("update failed,Illegal index");

}

Node cur = dummyHead.next;

for (int i = 0; i < index; i++) {

cur = cur.next;

}

cur.e = e;

}

三、判断是否有元素e

由于我们使用了虚拟头结点,而我们每次都需要从第一个真实节点开始,因此需要首先得到虚拟头结点的下一个节点是谁,然后判断给定的元素值与链表中的元素值内容是否相等(equals()方法),若相等则返回true,否则返回false。

//查找链表中是否有元素e

public boolean contains(E e) {

Node cur = dummyHead.next;

while (cur != null) {

if (cur.e.equals(e)) {

return true;

}

cur = cur.next;

}

return false;

}

四、toString()方法的重写

为了在输出该链表对象时可以查看相关自定义的信息,我们对toString()进行重写改造。

//重写object类,便于测试

@Override

public String toString() {

StringBuilder res = new StringBuilder();

Node cur = dummyHead.next;

while (cur != null) {

res.append(cur + "->");

cur = cur.next;

}

res.append("NULL");

return res.toString();

}

此时该方法等同于

//重写object类,便于测试

@Override

public String toString() {

StringBuilder res = new StringBuilder();

for (Node cur = dummyHead.next; cur != null; cur = cur.next) {

res.append(cur + "->");

}

res.append("NULL");

return res.toString();

}

五、测试

新建一个main函数,填写相关测试代码如下:

package LinkedList;

public class TestMain {

public static void main(String[] args) {

LinkedList linkedList = new LinkedList();

System.out.println("============在链表头部添加============");

for (int i = 0; i < 5; i++) {

linkedList.addFirst(i);

System.out.println(linkedList);

}

System.out.println("============修改链表============");

linkedList.set(2,666);

System.out.println(linkedList);

}

}

结果为:

b1498b9a6e342f3f1a24f850130050b2.png

结果分析:由于是在链表头部添加元素,故最终显示结果为从右到左,最右为NULL(也就是最后一个节点)。

希望本文所述对大家java程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值