LinkedList简要底层原理图
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Node {
//上个元素地址
private Node pre;
//当前存入的元素
private Object object;
//下一个元素地址
private Node next;
}
package com.msb.LinkList; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author lcc * @version V1.0 * @Package com.msb.LinkList * @date 2022/4/24 9:31 */ @AllArgsConstructor @NoArgsConstructor @Data public class MyLinkList { //链中一定有一个首节点 private Node first; //脸肿一定有一个尾节点 private Node last; //计数器 每天夹一个元素+1 int count=0; public void add(Object o) { if (first==null){ //添加的是第一个节点 需要将添加的元素分装为node 对象 Node node=new Node(); node.setPre(null); node.setObject(o); node.setNext(null); //当前链中第一个个点变为n first=node; //当前最后一个节点也变为n last=node; }else { //已经不是第一个节点了 Node node=new Node(); node.setPre(last); node.setObject(o); node.setNext(null); //当前链中的最后一个节点的下一个元素指向node last.setNext(node); //将最后一个节点变为n last=node; } count++; } //得到集合中的数量 public int getSize(){ return count; } //通过下标获取元素 public Object get(int index) { Node n=first; for (int i = 0; i < index; i++) { n = n.getNext(); } return n.getObject(); } } class Test{ public static void main(String[] args) { MyLinkList myLinkList = new MyLinkList(); myLinkList.add("aaa"); myLinkList.add("bbb"); myLinkList.add("ccc"); System.out.println(myLinkList.getSize()); System.out.println(myLinkList.get(2)); } }