自己实现LinkedList类
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.3 List集合:ArrayList和LinkedList类的用法及区别
List集合: List 是一个有序.可重复的集合,集合中每个元素都有其对应的顺序索引. List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素. List 集合默认按元素的添加顺序设置 ...
- java集合框架LinkedList类的方法理解
java提供的LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用. LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口 ...
- JDK1.8源码(六)——java.util.LinkedList 类
上一篇博客我们介绍了List集合的一种典型实现 ArrayList,我们知道 ArrayList 是由数组构成的,本篇博客我们介绍 List 集合的另一种典型实现 LinkedList,这是一个由链表 ...
- .实现 linkedlist 类java_面试官:兄弟,说说 ArrayList 和 LinkedList 有什么区别
来自公众号:沉默王二 ArrayList 和 LinkedList 有什么区别,是面试官非常喜欢问的一个问题.可能大部分小伙伴和我一样,能回答出"ArrayList 是基于数组实现的,Lin ...
- java中LinkedList类的操作
LinkedList类是双向链表,单向队列,双向队列,栈的实现类: LinkedList类实现单向队列和双向队列的接口,自身提高了栈操作的方法,链表操作的方法. 在LinkedList类中存在很多方法 ...
- ArrayList和LinkedList类的用法及区别
List 是一个有序.可重复的集合,集合中每个元素都有其对应的顺序索引.List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素.List 集合默认按元素的添加顺序设置元素的索引,第一个添 ...
- 菜鸟的学习之路(10) — LinkedList类
一.认识LinkedList类: 实现的接口:Serializable,Cloneable,Iterable,Collection,Deque,List,Queue 父类:AbstractSequen ...
- Java基础篇之LinkedList类
LinkedList类扩展AbstractSequentialList并执行List接口.它提供了一个链接列表数据结构.它具有如下的两个构造函数,说明如下: LinkedList( ) LinkedL ...
- LinkedList 类 的简单应用
说明:仅仅用于备考,转载注明. 继续分析案例( ArrayList类中 ):小型电影DVD在线销售系统需要增加新的功能,如下: 能够添加销售冠军电影DVD对象 能够删除销售最后一名的电影DVD对象 方 ...
- 14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)
本篇主要是集合框架基础和List集合,Map集合等等后续更 集合 14.1 集合框架 14.1.1 概念 14.1.2 集合架构 14.2 Collection接口 14.2.1 常用方法 14.3 ...
最新文章
- Zabbix添加Ping外网IP监控
- kali-linux 完美解决sublime输入 中文
- 我爱我家 CIO 刘东颖:如何靠六大维度提升“数字化”能力?|鲸犀峰会
- 零售连锁管理软件_连锁超市用哪个收银软件好?
- 接口 Closeable
- 在esx server VI里导入其它虚拟机
- ioctl 函数 参数 详解
- 数据结构----出栈顺序有效性的判断
- 测试工程方法:判定表驱动法
- Android NDK开发: 通过C/C++调用第三方so库
- Win10远程桌面 出现 身份验证错误,要求的函数不受支持,这可能是由于CredSSP加密Oracle修正 解决方法
- vue 为什么要销毁第三方实例_Web前端工程师面试之Vue问题汇总解析
- mysql找出最大的天数_mysql 计算连续登录最大天数
- mysql GROUP BY和HAVING
- w7系统里没有iis信息服务器,win7系统控制面板的管理选项没有“internet信息服务(IIS)管理器”的解决方法...
- 三菱FX5U,机床X轴Y轴工作台定位控制程序 使用三菱J4-A系列伺服驱动器绝对位置系统,程序大小27000多步
- 电脑自动关机后文件丢失,如何恢复
- When I’m old and dying
- Android 最简单的自定义证件照Mask之一
- 用火狐浏览器看b站视频默认没有声音
热门文章
- WebLogic—安装
- 在Eclipse中配置DOS(cmd)窗口
- ASP.NET防止网页后退(禁止缓存)
- Python 目录及文件操作(os.模块)
- 年月日时分秒格式_日期时间格式中提取日期,居然用INT
- json 转换 java odl_opendaylight:如何查看配置数据库
- linux字符串处理命令,linux 命令之 字符串处理命令——paste
- 树莓派 4b 可执行文件 无法双击运行_树莓派01 - 树莓派系统安装
- 锦城学院计算机系考研,奋斗的青春, 滚烫的人生—— —我的考研路
- React:基础知识学习