Java实现链表中元素的获取、查询和修改方法详解

 更新时间:2020年03月17日 10:24:35   作者:WFaceBoss  
这篇文章主要介绍了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<E> 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<E> 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<E> 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<E> 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<E> 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<Integer> linkedList = new LinkedList<Integer>();

    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);
  }
}

结果为:

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

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

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

相关文章

  • java简单坦克大战制作代码

    java简单坦克大战制作代码

    这篇文章主要介绍了java简单坦克大战制作代码,利用Java语言中的集合、Swing、线程等知识点编写一个坦克大战游戏,需要的朋友可以参考下
    2016-07-07
  • JDK的具体安装步骤(带图带解释巨详细)

    JDK的具体安装步骤(带图带解释巨详细)

    Java是一种广泛使用的编程语言,许多应用程序和系统都依赖于它,如果您想进行Java编程或运行Java应用程序,首先需要安装Java开发工具包(JDK),这篇文章主要给大家介绍了关于JDK具体安装步骤的相关资料,文中介绍的方法带图带解释巨详细,需要的朋友可以参考下
    2024-05-05
  • Java面试题冲刺第十五天--设计模式

    Java面试题冲刺第十五天--设计模式

    这篇文章主要为大家分享了最有价值的三道关于设计模式的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot接入支付宝支付的方法步骤

    SpringBoot接入支付宝支付的方法步骤

    这篇文章主要介绍了SpringBoot接入支付宝支付的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • ElasticSearch合理分配索引分片原理

    ElasticSearch合理分配索引分片原理

    这篇文章主要介绍了ElasticSearch合理分配索引分片原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java实现文件的分割与合并

    Java实现文件的分割与合并

    这篇文章主要为大家详细介绍了Java实现文件的分割与合并,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • java实战技巧之if-else代码优化技巧大全

    java实战技巧之if-else代码优化技巧大全

    代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,下面这篇文章主要给大家介绍了关于java实战技巧之if-else代码优化技巧的相关资料,需要的朋友可以参考下
    2022-02-02
  • Spring AOP注解实战指南

    Spring AOP注解实战指南

    在现代软件开发中,面向切面编程(AOP)是一种强大的编程范式,本文将介绍如何在Spring框架中通过AspectJ注解以及对应的XML配置来实现AOP,在不改变主业务逻辑的情况下增强应用程序的功能,需要的朋友可以参考下
    2024-06-06
  • IDEA 2020.3 更新了机器学习都整上了

    IDEA 2020.3 更新了机器学习都整上了

    IDEA 欢迎窗口全新升级,首页增加三个选项卡,一个用于设置 IDE 界面的 Customize,一个用于插件安装的 Plugins,一个于访问帮助和学习资源的 Learn IntelliJ IDEA,另外包括之前用于管理项目的 Projects,需要的朋友可以参考下
    2020-12-12
  • 单元测试 @mock与@SpringBootTest的使用

    单元测试 @mock与@SpringBootTest的使用

    这篇文章主要介绍了单元测试 @mock与@SpringBootTest的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论