第二篇 集合与容器(二)
第一版
package com.zzp.demo.myCollection; public class Node { Node previous; //上一节点 Node next; //下一节点 Object element; //数据 public Node(Object element) { super(); this.element = element; } public Node(Node previous, Node next, Object element) { super(); this.previous = previous; this.next = next; this.element = element; } }
package com.zzp.demo.myCollection; /** * * 自定义链表 * @author java * */ public class LinkedList01 { private Node first; private Node last; private int size; //添加元素 public void add(Object obj){ Node node = new Node(obj); if(first == null){ first = node; last = node; }else{ node.previous = last; node.next = null; last.next = node; last = node; } } //打印字符串 @Override public String toString() { StringBuilder sb = new StringBuilder("["); Node temp = first; while(temp != null){ sb.append(temp.element + ","); temp = temp.next; } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } public static void main(String[] args) { LinkedList01 ls = new LinkedList01(); ls.add("sa"); ls.add("sdsf"); ls.add("kajs"); System.out.println(ls.toString()); } }
第二版
package com.zzp.demo.myCollection; /** * * 自定义链表 * 增加get方法 * @author java * */ public class LinkedList02 { private Node first; private Node last; private int size; public Object get(int index){ if(index < 0 || index > size - 1){ throw new RuntimeException("索引不合法"+index); } Node temp = 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.element; } //添加元素 public void add(Object obj){ Node node = new Node(obj); if(first == null){ first = node; last = node; }else{ node.previous = last; node.next = null; last.next = node; last = node; } size++; } //打印字符串 @Override public String toString() { StringBuilder sb = new StringBuilder("["); Node temp = first; while(temp != null){ sb.append(temp.element + ","); temp = temp.next; } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } public static void main(String[] args) { LinkedList02 ls = new LinkedList02(); ls.add("sa"); ls.add("sdsf"); ls.add("kajs"); ls.add("sajd"); ls.add("sdsfgf"); ls.add("kajsds"); System.out.println(ls.size); System.out.println(ls.get(3)); } }
第三版
package com.zzp.demo.myCollection; /** * * 自定义链表 * 增加remove方法 * @author java * */ public class LinkedList03 { private Node first; private Node last; private int size; public Object get(int index){ if(index < 0 || index > size - 1){ throw new RuntimeException("索引不合法"+index); } Node temp = getNode(index); return temp != null ? temp.element : null; } public void remove(int index){ Node temp = getNode(index); if(temp != null){ Node up = temp.previous; Node down = temp.next; if(up != null){ up.next = down; } if(down != null){ down.previous = up; } if(index == 0){ first = down; } if(index == size - 1){ last = up; } size--; } } public Node getNode(int index){ Node temp = 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 node = new Node(obj); if(first == null){ first = node; last = node; }else{ node.previous = last; node.next = null; last.next = node; last = node; } size++; } //打印字符串 @Override public String toString() { StringBuilder sb = new StringBuilder("["); Node temp = first; while(temp != null){ sb.append(temp.element + ","); temp = temp.next; } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } public static void main(String[] args) { LinkedList03 ls = new LinkedList03(); ls.add("sa"); ls.add("sdsf"); ls.add("kajs"); ls.add("sajd"); ls.add("sdsfgf"); ls.add("kajsds"); System.out.println(ls.size); System.out.println(ls.get(3)); ls.remove(0); System.out.println(ls); } }
第四版
package com.zzp.demo.myCollection; /** * * 自定义链表 * 增加插入节点 * @author java * */ public class LinkedList04 { private Node first; private Node last; private int size; public Object get(int index){ if(index < 0 || index > size - 1){ throw new RuntimeException("索引不合法"+index); } Node temp = getNode(index); return temp != null ? temp.element : null; } public void remove(int index){ Node temp = getNode(index); if(temp != null){ Node up = temp.previous; Node down = temp.next; if(up != null){ up.next = down; } if(down != null){ down.previous = up; } if(index == 0){ first = down; } if(index == size - 1){ last = up; } size--; } } //增加操作 public void add(int index,Object obj){ Node newNode = new Node(obj); Node temp = getNode(index); if(temp != null){ Node up = temp.previous; up.next = newNode; newNode.previous = up; newNode.next = temp; temp.previous = newNode; } } public Node getNode(int index){ Node temp = 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 node = new Node(obj); if(first == null){ first = node; last = node; }else{ node.previous = last; node.next = null; last.next = node; last = node; } size++; } //打印字符串 @Override public String toString() { StringBuilder sb = new StringBuilder("["); Node temp = first; while(temp != null){ sb.append(temp.element + ","); temp = temp.next; } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } public static void main(String[] args) { LinkedList04 ls = new LinkedList04(); ls.add("sa"); ls.add("sdsf"); ls.add("kajs"); ls.add("sajd"); ls.add("sdsfgf"); ls.add("kajsds"); System.out.println(ls.size); System.out.println(ls.get(3)); ls.remove(0); ls.add(0,"sjjiej"); System.out.println(ls); } }
第五版
package com.zzp.demo.myCollection; /** * * 自定义链表 * 增加小的封装,增加泛型 * @author java * */ public class LinkedList05<E> { private Node first; private Node last; private int size; private void checkIndex(int index){ if(index < 0 || index > size - 1){ throw new RuntimeException("索引不合法"+index); } } public E get(int index){ checkIndex(index); Node temp = getNode(index); return temp != null ?(E) temp.element : null; } public void remove(int index){ checkIndex(index); Node temp = getNode(index); if(temp != null){ Node up = temp.previous; Node down = temp.next; if(up != null){ up.next = down; } if(down != null){ down.previous = up; } if(index == 0){ first = down; } if(index == size - 1){ last = up; } size--; } } //增加操作 public void add(int index,E element){ checkIndex(index); Node newNode = new Node(element); Node temp = getNode(index); if(temp != null){ Node up = temp.previous; up.next = newNode; newNode.previous = up; newNode.next = temp; temp.previous = newNode; } } private Node getNode(int index){ checkIndex(index); Node temp = 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(E element){ Node node = new Node(element); if(first == null){ first = node; last = node; }else{ node.previous = last; node.next = null; last.next = node; last = node; } size++; } //打印字符串 @Override public String toString() { StringBuilder sb = new StringBuilder("["); Node temp = first; while(temp != null){ sb.append(temp.element + ","); temp = temp.next; } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } public static void main(String[] args) { LinkedList05<String> ls = new LinkedList05<>(); ls.add("sa"); ls.add("sdsf"); ls.add("kajs"); ls.add("sajd"); ls.add("sdsfgf"); ls.add("kajsds"); System.out.println(ls.size); System.out.println(ls.get(3)); ls.remove(0); ls.add(0,"sjjiej"); System.out.println(ls); } }