JAVA(手寫)簡單實現ArrayList和LinkedList

JAVA(手寫)簡單實現ArrayList和LinkedList

你們都知道在java學習中list類的實現類中有ArrayList 和LinkedList,其中ArrayList是使用數組實現,而LinkedList則是用鏈表實現的。今天就本身去用java去簡單實現一下它們。java

1.ArrayList的實現

1.類必須的屬性
一個object的數組
list的長度
2.基本代碼node

`public class MyArrayList {
   private Object[] objs;//一個object數組
   private int size;//大小
   public MyArrayList() {
	   this(10);//初始大小爲10
   }
   public MyArrayList(int initCapacity) {
	   objs=new Object[initCapacity];
   }
   public void add(Object object) {
       //size是否小於obj的長度
	   if(size<objs.length) {
		   objs[size]=object;
		   size++;
	     }
	   else{
		   Object[] bObjects=new Object[size*2];
		   for(int i=0;i<objs.length;i++) {
			   bObjects[i]=objs[i];  
		   }
		   objs=bObjects;
		   objs[size]=object;
		   size++;
	     }
   }
   
   public static void main(String[] args) {
	MyArrayList list=new MyArrayList(2);
    List ls=new ArrayList<Integer>();
    ls.add(1);
	list.add("aaaa");
	list.add("bb");
	list.add("cccc");
	list.add("sadasda");
	System.out.println(list.size);
}
}

2.LinkedList的實現

1.建立node類數組

package com.list.test;

public class Node {
    Node pre;//上一個節點
   Object obj;//當前數據
   Node next;//下一個節點
public Node(Node pre, Object obj, Node next) {
	super();
	this.pre = pre;
	this.obj = obj;
	this.next = next;
}
public Node() {
	
}
public Node getPre() {
	return pre;
}
public void setPre(Node pre) {
	this.pre = pre;
}
public Object getObj() {
	return obj;
}
public void setObj(Object obj) {
	this.obj = obj;
}
public Node getNext() {
	return next;
}
public void setNext(Node next) {
	this.next = next;
}

}

2.實現LinkedList類markdown

package com.list.test;

import org.omg.IOP.CodecPackage.InvalidTypeForEncodingHelper;

public class MyLinkedList {
  private Node first;
  private Node last;
  private int size;
  public void add(Object o) {
	  Node n=new Node();
	  if(first==null) {
		  n.setPre(null);
		  n.setObj(o);
		  n.setNext(null);
		  first=last=n;		  
	  }
	  else {  
		  n.setPre(last);
		  n.setObj(o);
		  n.setNext(null);
		  last.setNext(n);
		  last=n;
	  }
	  size++;
  }
  public Object get(int index) {
	 rangeCheck(index);
	 Node temp=first;
	 if(first!=null) {
		for(int i=0;i<index;i++) {
			temp=temp.next;
		}
	  }
	 return temp.obj;
   }
  
  public void rangeCheck(int index) {
	  if(index<0||index>=size) {
		  try {
			throw new Exception();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	  }
  }
  /***
   * 在索引位置添加值
   * @param index
   * @param obj
   */
  public void add(int index,Object obj) {
	  //根據索引查出節點
	  Node temp=findNode(index);
	  //建立新的節點,並賦值
	  Node newNode=new Node();
	  newNode.obj=obj;
	  if(temp!=null) {
		  //找出當前索引的前一個節點
		  Node up=temp.pre;
		  //將前一個節點的下一個節點賦值爲新節點
		  up.next=newNode;
		  //將新節點的前一個節點賦值爲up節點
		  newNode.pre=up;
		  //將新節點的下一個節點賦值temp節點
		  newNode.next=temp;
		  //將temp節點的前一個節點賦值爲新節點
		  temp.pre=newNode;
		  
		  
		  size++;
	  }
    }
  /**
   * 按照索引查找節點
   * @param index
   * @return
   */
private Node findNode(int index) {
	  Node temp=first;
		 if(first!=null) {
			for(int i=0;i<index;i++) {
				temp=temp.next;
			}
		  }	
		 return temp;
  }
  /**
   * 按索引刪除數據
   * @param index
   */
  public void remove(int index) {
	    rangeCheck(index);
	    Node temp=findNode(index);
		 
		 if(temp!=null) {
			 Node up=temp.pre;
			 Node down=temp.next;
			 up.next=down;
			 down.pre=up;
			 size--;
		 }
  }
  public int size() {
	return size;
   }
  public static void main(String[] args) {
	
	  MyLinkedList list=new MyLinkedList();
	  list.add("aaa");
	  list.add("bbbb");
	  list.add("ccccc");
	  list.add(1,"acassc");
	  
	  System.out.println(list.size());
	  System.out.println(list.get(1));
	  
}
}

====

相關文章
相關標籤/搜索