自己写简单的LinkedList

来源:互联网 发布:股票资产分析软件 编辑:程序博客网 时间:2024/05/01 23:04

最近复习基础知识,看了下LinkedList源码,决定自己也写写,当然方法不多,只是个简化版。

package 集合;public class MyLinkList  {private transient int size = 0;private transient Node  first;private transient Node  last;public MyLinkList() {}/** * 返回List的大小 * @return size List的大小 */public int size() {return size;}/** * 添加元素 * @param obj 元素 */public void add(Object obj){Node node=new Node();node.obj=obj;if(first==null){node.previous=null;node.next=null;first=node;last=node;}else{node.previous=last;node.next=null;last.next=node;last=node;}size++;}/** * 根据索引获取该元素 * @param index 索引 * @return Object */public Object get(int index){checkRange(index);if(index<(size>>1)){Node temp=first;for(int i=0;i<index;i++) temp=temp.next;return temp.obj;}else{Node temp=last;for(int i=size-1;i>index;i--) temp=temp.previous;return temp.obj;}}/** * 根据内容删除元素 * @param obj 元素内容 * @return boolean */public boolean remove(Object obj){if(obj==null){for(Node node=first;node!=null;node=node.next){if(node.obj==null){RedirectPoint(node);return true;}}return false;}else{for(Node node=first;node!=null;node=node.next){if(obj.equals(node.obj)){RedirectPoint(node);return true;}}return false;}}/** * 根据索引删除元素 * @param index 元素的索引 * @return boolean  */public Object remove(int index){checkRange(index);if(index<(size>>1)){Node node=first;for(int i=0;i<index;i++){node=node.next;}Object obj=node.obj;RedirectPoint(node);return obj;}else{Node node=last;for(int i=size-1;i>index;i--){node=node.previous;}Object obj=node.obj;RedirectPoint(node);return obj;}}/** * 查找元素的索引,只返回元素第一次出现的索引,若没有该元素则返回-1; * @param Object 要查找的元素 */public int find(Object obj){int index=0;if(obj==null){for(Node node=first;node!=null;node=node.next){if(node.obj==null) return index;index++;}}else{for(Node node=first;node!=null;node=node.next){if(obj.equals(node.obj))return index;index++;}}return -1;}//检查索引是否越界private void checkRange(int index){if(index>=size||index<0){try{throw new Exception();}catch(Exception e){System.out.println("数组越界,请检查索引是否超出列表的大小");e.printStackTrace();}}}//删除的内部操作,指针重定向private void RedirectPoint(Node node){Node up=node.previous;Node down=node.next;up.next=down;down.previous=up;size--;}//MylinkList的内部类private class Node{Object obj;Node  previous;Node  next;Node(){}}}


0 0