packagelist;importjava.util.Collection;importjava.util.Iterator;importjava.util.List;importjava.util.ListIterator;/**
* LinkedList
* 总结:通过LinkedList源码发现在增加和删除数据的时候不会造成数据的拷贝和移动但是在查询时候会进行一次遍历所以LinkedList添加快查询慢
*/publicclassMyLinkedListimplementsList{privateint size;privateNode first;privateNode last;privatestaticclassNode{// 存储的数据Object item;// 上一个Node next;// 下一个Node prev;publicNode(Node prev,Object item,Node next){this.next = next;this.item = item;this.prev = prev;}}@Overridepublicintsize(){return size;}@OverridepublicbooleanisEmpty(){returnfalse;}@Overridepublicbooleancontains(Object o){returnfalse;}@OverridepublicIteratoriterator(){returnnull;}@OverridepublicObject[]toArray(){returnnewObject[0];}@Overridepublicbooleanadd(Object o){Node l = last;Node node =newNode(l, o,null);
last = node;if(l ==null){
first = node;}else{
l.next = node;}
size++;returntrue;}@Overridepublicbooleanremove(Object o){returnfalse;}@OverridepublicbooleanaddAll(Collection c){returnfalse;}@OverridepublicbooleanaddAll(int index,Collection c){returnfalse;}@Overridepublicvoidclear(){}@OverridepublicObjectget(int index){if(index <(size >>1)){Node x = first;for(int i =0; i < index; i++){
x = x.next;}return x.item;}else{Node x = last;for(int i = size -1; i > index; i--){
x = x.prev;}return x.item;}}@OverridepublicObjectset(int index,Object element){returnnull;}@Overridepublicvoidadd(int index,Object element){}@OverridepublicObjectremove(int index){returnnull;}@OverridepublicintindexOf(Object o){return0;}@OverridepublicintlastIndexOf(Object o){return0;}@OverridepublicListIteratorlistIterator(){returnnull;}@OverridepublicListIteratorlistIterator(int index){returnnull;}@OverridepublicListsubList(int fromIndex,int toIndex){returnnull;}@OverridepublicbooleanretainAll(Collection c){returnfalse;}@OverridepublicbooleanremoveAll(Collection c){returnfalse;}@OverridepublicbooleancontainsAll(Collection c){returnfalse;}@OverridepublicObject[]toArray(Object[] a){returnnewObject[0];}}
packageTest.list;importlist.MyArrayList;importlist.MyLinkedList;importorg.junit.jupiter.api.Test;importjava.util.List;publicclassMylinkedListTest{@Testpublicvoidtest01(){List list =newMyLinkedList();for(int i =0; i <5; i++){
list.add(i);}System.out.println(list.size());}//5@Testpublicvoidtest02(){List list =newMyLinkedList();for(int i =0; i <10; i++){
list.add(i);}System.out.println(list.size());}//10@Testpublicvoidtest03(){List list =newMyLinkedList();for(int i =0; i <10; i++){
list.add(i);}System.out.println(list.size());
list.add(10);System.out.println(list.size());}/*
10
11
*/@Testpublicvoidtest04(){List list =newMyLinkedList();for(int i =0; i <10; i++){
list.add(i);}System.out.println(list.size());
list.add(10);System.out.println(list.size());System.out.println(list.get(5));}/*
10
11
5
*/@Testpublicvoidtest05(){List list =newMyLinkedList();for(int i =0; i <10; i++){
list.add(i);}for(int i =0; i < list.size(); i++){System.out.println(list.get(i));}}/*
0
1
2
3
4
5
6
7
8
9
*/@Testpublicvoidtest06(){List list =newMyArrayList();for(int i =0; i <10; i++){
list.add(i);}System.out.println(list);}//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]@Testpublicvoidtest07(){List list =newMyArrayList();for(int i =0; i <10; i++){
list.add(i);}System.out.println(list);
list.remove(3);System.out.println(list);System.out.println(list.size());}/*
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 4, 5, 6, 7, 8, 9]
9
*/}