package cn.hxd.collection;
/*** 创建一个节点类* @author Administrator**/
public class Node {Node previous;Object object;Node next;public Node() {}public Node(Node privious, Object object, Node next) {super();this.previous = privious;this.object = object;this.next = next;}public Node getPrivious() {return previous;}public void setPrivious(Node privious) {this.previous = privious;}public Object getObject() {return object;}public void setObject(Object object) {this.object = object;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}}

  

package cn.hxd.collection;
/*** 自己实现的Linkedlist* @author Administrator**/
public class MyLinkedList {private Node first;private Node last;private int size;public void add(Object obj) {//在末尾添加元素Node n = new Node();if(first==null) {n.setPrivious(null);n.setObject(obj);n.setNext(null);first = n;last = n;}else {n.setPrivious(last);n.setObject(obj);n.setNext(null);last.setNext(n);last = n;}size++;}public void add(int index,Object obj) {//在指定位置添加元素Node temp = node(index);Node newNode = new Node();newNode.object = obj;if(index==0) {//指定第一个位置添加元素first = newNode;temp.previous = newNode;newNode.next = temp;size++;}else if(index ==size) {//指定最后一个位置添加元素add(obj);}else {Node up = temp.previous;up.next = newNode;newNode.previous = up;newNode.next = temp;temp.previous = newNode;size++;}}public int size() {//返回列表大小return size;}public Object get(int index) {//返回指定位置的对象rangeCheck(index);Node temp = node(index);if(temp!=null) {return temp.object;}return null;}private void rangeCheck(int index) {if(index<0||index>=size) {try {throw new Exception();} catch (Exception e) {e.printStackTrace();}}}public void remove(int index){//删除指定位置的对象元素Node temp = node(index);if(index==0) {temp.next.previous = null;first = temp.next;}else if(temp.next==null) {last = temp.previous;}else {Node up = temp.previous;Node down = temp.next;up.next = down;down.previous = up;}
//      if(temp!=null&&index != 0&&index!=size-1){
//          Node up = temp.previous;
//          Node down = temp.next;
//          up.next = down;
//          down.previous = up;
//      }else if(index==0) {
//          temp.next.previous = null;
//          first = temp.next;
//      }else if(temp.next==null) {
//          last = temp.previous;
//      }size--; }public void clear() {}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 static void main(String[] args) {MyLinkedList list= new MyLinkedList();list.add("aaa");list.add("bbb");list.add("ccc");//list.add(0,"000");//list.add(3, 333);//list.remove(2);System.out.println(list.size);System.out.println(list.get(3));for(int i=0;i<list.size;i++) {System.out.print(list.get(i)+" ");}}
}

  

转载于:https://www.cnblogs.com/houxudong/p/7028048.html

自己实现LinkedList类相关推荐

  1. 1.3 List集合:ArrayList和LinkedList类的用法及区别

    List集合: List 是一个有序.可重复的集合,集合中每个元素都有其对应的顺序索引. List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素. List 集合默认按元素的添加顺序设置 ...

  2. java集合框架LinkedList类的方法理解

    java提供的LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用. LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口 ...

  3. JDK1.8源码(六)——java.util.LinkedList 类

    上一篇博客我们介绍了List集合的一种典型实现 ArrayList,我们知道 ArrayList 是由数组构成的,本篇博客我们介绍 List 集合的另一种典型实现 LinkedList,这是一个由链表 ...

  4. .实现 linkedlist 类java_面试官:兄弟,说说 ArrayList 和 LinkedList 有什么区别

    来自公众号:沉默王二 ArrayList 和 LinkedList 有什么区别,是面试官非常喜欢问的一个问题.可能大部分小伙伴和我一样,能回答出"ArrayList 是基于数组实现的,Lin ...

  5. java中LinkedList类的操作

    LinkedList类是双向链表,单向队列,双向队列,栈的实现类: LinkedList类实现单向队列和双向队列的接口,自身提高了栈操作的方法,链表操作的方法. 在LinkedList类中存在很多方法 ...

  6. ArrayList和LinkedList类的用法及区别

    List 是一个有序.可重复的集合,集合中每个元素都有其对应的顺序索引.List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素.List 集合默认按元素的添加顺序设置元素的索引,第一个添 ...

  7. 菜鸟的学习之路(10) — LinkedList类

    一.认识LinkedList类: 实现的接口:Serializable,Cloneable,Iterable,Collection,Deque,List,Queue 父类:AbstractSequen ...

  8. Java基础篇之LinkedList类

    LinkedList类扩展AbstractSequentialList并执行List接口.它提供了一个链接列表数据结构.它具有如下的两个构造函数,说明如下: LinkedList( ) LinkedL ...

  9. LinkedList 类 的简单应用

    说明:仅仅用于备考,转载注明. 继续分析案例( ArrayList类中 ):小型电影DVD在线销售系统需要增加新的功能,如下: 能够添加销售冠军电影DVD对象 能够删除销售最后一名的电影DVD对象 方 ...

  10. 14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)

    本篇主要是集合框架基础和List集合,Map集合等等后续更 集合 14.1 集合框架 14.1.1 概念 14.1.2 集合架构 14.2 Collection接口 14.2.1 常用方法 14.3 ...

最新文章

  1. Zabbix添加Ping外网IP监控
  2. kali-linux 完美解决sublime输入 中文
  3. 我爱我家 CIO 刘东颖:如何靠六大维度提升“数字化”能力?|鲸犀峰会
  4. 零售连锁管理软件_连锁超市用哪个收银软件好?
  5. 接口 Closeable
  6. 在esx server VI里导入其它虚拟机
  7. ioctl 函数 参数 详解
  8. 数据结构----出栈顺序有效性的判断
  9. 测试工程方法:判定表驱动法
  10. Android NDK开发: 通过C/C++调用第三方so库
  11. Win10远程桌面 出现 身份验证错误,要求的函数不受支持,这可能是由于CredSSP加密Oracle修正 解决方法
  12. vue 为什么要销毁第三方实例_Web前端工程师面试之Vue问题汇总解析
  13. mysql找出最大的天数_mysql 计算连续登录最大天数
  14. mysql GROUP BY和HAVING
  15. w7系统里没有iis信息服务器,win7系统控制面板的管理选项没有“internet信息服务(IIS)管理器”的解决方法...
  16. 三菱FX5U,机床X轴Y轴工作台定位控制程序 使用三菱J4-A系列伺服驱动器绝对位置系统,程序大小27000多步
  17. 电脑自动关机后文件丢失,如何恢复
  18. When I’m old and dying
  19. Android 最简单的自定义证件照Mask之一
  20. 用火狐浏览器看b站视频默认没有声音

热门文章

  1. WebLogic—安装
  2. 在Eclipse中配置DOS(cmd)窗口
  3. ASP.NET防止网页后退(禁止缓存)
  4. Python 目录及文件操作(os.模块)
  5. 年月日时分秒格式_日期时间格式中提取日期,居然用INT
  6. json 转换 java odl_opendaylight:如何查看配置数据库
  7. linux字符串处理命令,linux 命令之 字符串处理命令——paste
  8. 树莓派 4b 可执行文件 无法双击运行_树莓派01 - 树莓派系统安装
  9. 锦城学院计算机系考研,奋斗的青春, 滚烫的人生—— —我的考研路
  10. React:基础知识学习