103-104_容器_JDK源代码分析_自己实现LinkedList
来源:互联网 发布:淘宝商城三星手机壳 编辑:程序博客网 时间:2024/06/05 18:13
public class MyLinkedList/*implements List*/{ class Node{ Node previous; Object obj; Node next; } private Node first; private Node last; private int size; public int size(){ return size; } //索引越界检测 private void rangeCheck(int index){ if(index<0||index>=size){ try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } } //根据索引找到相关节点 public Node node(int index){ Node temp = null; if(first!=null){ if (index < (size >> 1)) { temp = first; for(int i=0;i<index;i++){ temp = temp.next; } }else{ temp = last; for (int i = size - 1; i > index; i--){ temp = temp.previous; } } } return temp; } public void add(Object obj){ Node n = new Node(); if(first==null){ n.previous=null; n.obj=obj; n.next=null; first = n; last = n; }else{ //直接往last节点后增加新的节点 n.previous=last; n.obj=obj; n.next=null; last.next=n; last = n; } size++; } public Object get(int index){ //2 rangeCheck(index); // 0 1 2 3 4 Node temp = node(index); if(temp!=null){ return temp.obj; } return null; } public void remove(int index){ Node temp = node(index); if(temp!=null){ Node up = temp.previous; Node down = temp.next; up.next = down; down.previous = up; size--; } } public void add(int index,Object obj){ Node temp = node(index); Node newNode = new Node(); newNode.obj = obj; if(temp!=null){ Node up = temp.previous; up.next = newNode; newNode.previous = up; newNode.next = temp; temp.previous = newNode; size++; } } public static void main(String[] args) { MyLinkedList list = new MyLinkedList(); list.add("aaa"); list.add("bbb");// list.add(1,"BBBB"); list.add("ccc"); list.add("ddd"); list.add("eee");// list.remove(1); System.out.println(list.get(3)); } }
阅读全文
0 0
- 103-104_容器_JDK源代码分析_自己实现LinkedList
- 101-102_容器_JDK源代码分析_自己实现ArrayList
- 容器第四课,JDK源代码分析,自己实现LinkedList,双向链表的概念_节点定义
- 59_数组_模拟ArrayList容器的底层实现_JDK源码分析ArrayList
- 56-58_数组_StringBuilder和StringBuffer_常用方法_方法链的实现_JDK源码分析_常见面试题
- 106_容器_自己实现HashMap_MyMap原始版_效率较低
- 54-55_数组_String类的常用方法_JDK源码分析_内存分析
- 114_容器_迭代器遍历List和Set_List迭代器源代码分析
- java学习之旅56--数组_StringBuilder和StringBuffer的使用_常用方法_方法链的实现_JDK源码分析
- 111_容器_自定义实现HashSet
- 016_《Delphi源代码分析》
- 107-109_容器_自己实现HashMap_Map底层实现_哈希算法实现_使用数组和链表
- 65_常用类_Date类的使用_JDk源码分析
- java学习之旅59--模拟ArrayList容器的底层实现_JDK源码分析ArrayList
- 110_容器_Set_HashSet基本用法_源码分析
- Java容器LinkedList源代码解析
- 119_容器_自定义实现迭代器_深入迭代器_迭代器原理_面向对象实现
- 【JavaSE笔记】反射_枚举_JDK新特性
- Jmeter目录结构解析
- bzoj1801: [Ahoi2009]chess 中国象棋
- 数据结构
- openccv wx打开图片以及Bitmap格式显示操作
- html中的文档元素
- 103-104_容器_JDK源代码分析_自己实现LinkedList
- POJ 2566 Bound Found (尺取法)
- 字典树(Trie树) C++实现
- 远程连接redis的bat脚本
- windows下如何安装lxml模块
- CSU1568-Shrine Maintenance
- 网络、反射、日期处理、正则表达式测试总结FancyLab
- ajax 同步和异步的区别
- 架构师之路--搜索业务和技术介绍及容错机制高级教程