最新公告
  • 欢迎您光临开源论坛,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 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);
      }
    }

    结果为:

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

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

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

    开源论坛,我们只做源码的搬运工
    开源论坛 » Java实现链表中元素的获取、查询和修改方法详解

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    开源论坛
    一个高级程序员模板开发平台

    发表评论

    • 251会员总数(位)
    • 411资源总数(个)
    • 4本周发布(个)
    • 0 今日发布(个)
    • 249稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情