手撕数据结构篇一(LinkedList)

        题主java 开发5年,面试中经常被问到List,今天来归纳下我们获取用的不是那么多的linkedList,一起看看其内部结构到底长什么样子。

        关于List 我们常用到的方法可能就是,add(), get(int index),或者remove...  常见的也就是add,get,再就是遍历了。常常听说各种面试资料里边说LinkedList 是链表结构,那传说中的链表结构到底长什么样子呢?今天说下题主自己的理解。

        所谓链表,无非就是串起来的一组对象而已,众所周知,java 里边万物皆对象,那为什么我不直接用java 里边的对象呢? 非要整一个链表将对象串起来?这里就不得不介绍下数据结构的作用了,链表提供了对对象的管理,方便api 使用方能很好的存储,并管理这些对象,假设没有链表,我们从数据库查出来的一组pojo 在内存中以什么形态存在呢?散落在内存各处,我们想遍历整个pojo或者想取某一个pojo 怎么得到呢?背景就介绍到这,接下来看代码实现(以下例子为个人按照linkedList 设计思路写的一个简版的linkedList) 

package com.pingan.pastry.base;

import java.util.LinkedList;
import java.util.List;

public class MyLink<E> {

    private Note first;

    private int size;

    public MyLink() {
    }

    public MyLink(Note first, int size) {
        this.first = first;
        this.size = size;
    }

    public void add(E element) {
        add(size,element);

        /*if (first == null) {
            first = new Note(element, null);
            size++;
            return;
        } else {
            Note last = first;


        }
        size++;*/
    }


    public void add(int index, E element) {
        if (index == 0) {
            first = new Note(element, null);
        } else {
            Note<E> pre = getNote(index - 1);
            Note note = pre.next;

            pre.next = new Note<>(element, note);
        }
        size++;
    }

    private Note<E> getNote(int index) {
        Note note = first;
        for (int i = 0; i < index; i++) {
            note = note.next;
        }
        return note;
    }

    public E get(int index) {
        if (index >= 0 && index < size) {
            Note note = first;
            for (int i = 0; i < index; i++) {
                note = note.next;
            }
            return (E) note.getElement();
        } else {
            throw new IndexOutOfBoundsException("index: " + index + ",size: " + size);
        }
    }

    public void remove(Object v) {

    }

    class Note<E> {
        private E element;
        private Note next;

        public Note() {
        }

        public Note(E element, Note next) {
            this.element = element;
            this.next = next;
        }

        public E getElement() {
            return element;
        }

        public void setElement(E element) {
            this.element = element;
        }

        public Note getNext() {
            return next;
        }

        public void setNext(Note next) {
            this.next = next;
        }
    }

    public static void main(String[] args) {
        List list=new LinkedList();
        MyLink linkData=new MyLink();
        linkData.add("hh");
        linkData.get(0);
        System.out.println("1: "+linkData.get(0));
        linkData.add(22);
        System.out.println("2 : "+linkData.get(1));
    }

输出结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值