java中自己实现一个ArrayList

import java.util.Arrays;
import java.util.Iterator;

public class MyList<T> implements Iterable<T>{
 /*
  * 设计一种容器:可以不初始化长度,长度可以自动拓展
  */
 private int length = 10;//定义初始化容量大小的变量
 private Object[] arr = new Object[length];//建立数组用于存储元素
 private int index = 0;//建立整数索引,用于记录当前有几个元素
 public MyList(int length){
  this.length = length;
 }
 public MyList(){}
 //添加元素的方法
 public void add(T obj){
  //如果元素超出了当前数组的长度,那么需要扩展长度
  if(index>=arr.length){
   //将原本的元素拷贝到新数组,并且数组长度增加10
   Object[] newArr = Arrays.copyOf(arr,arr.length+10);
   arr = newArr;
  }
  arr[index++] = obj;//往数组内添加元素,之后索引自增1
 }
 //获取元素
 public T get(int index){
  checkIndex(index);
  return (T)arr[index];
 }
 //定义方法,验证下标
 private void checkIndex(int index){
  if(index>=this.index){
   throw new IndexOutOfBoundsException("下标越界:"+index);
  }
 }
 //删除方法
 public void remove(int index){
  checkIndex(index);
  Object[] newArr = new Object[arr.length];
  //现将需要删除的元素的前面的所有元素复制
  System.arraycopy(arr,0,newArr,0,index);
  //复制要删除元素的后面的所有的元素
  System.arraycopy(arr,index+1,newArr,index,this.index-index-1);
  this.index--;
  arr = newArr;
 }
 //set方法
 public void set(int index,T obj){
  checkIndex(index);
  arr[index] = obj;
 }
 //toString
 public String toString(){
  StringBuilder sb = new StringBuilder();
  sb.append("[");
  for (int i = 0; i < index; i++)
  {
   sb.append(arr[i]);
   if(i < index-1){
    sb.append(",");
   }
  }
  sb.append("]");
  return sb.toString();
 }
 //length
 public int length(){
  return index;
 }
 //addAll
 public void addAll(MyList<T> mm){
  for (int i = 0; i < mm.length(); i++)
  {
   this.add(mm.get(i));
  }
 }
 //toArray
 public Object[] toArray(){
  Object[] res = Arrays.copyOf(arr, index);
  return res;
 }
 //remove
 public void remove(T t){
  for (int i = 0; i < index; i++)
  {
   if(arr[i].equals(t)){
    this.remove(i);
   }
  }
 }
 //removeAll
 public void removeAll(MyList<T> mm){
  for (int i = 0; i < mm.length(); i++)
  {
   this.remove(mm.get(i));
  }
 }
 //insert
 public void insert(int index,T t){
  checkIndex(index);
  //建立新数组
  Object[] newArr = new Object[arr.length+1];
  //复制将要添加的元素索引的之前的所有元素
  System.arraycopy(arr, 0, newArr, 0, index);
  newArr[index] = t;//将要插入的元素放入新数组的指定位置
  System.arraycopy(arr, index, newArr,index+1,arr.length-index);
  this.index++;
  arr = newArr;
 }
 @Override
 public Iterator<T> iterator()
 {
  
  Iterator<T> ite = new Iterator<T>()
  {
   int index = 0;
   @Override
   public boolean hasNext()
   {
    if(index<MyList.this.index){
     return true;
    }else{
     return false;
    }
   }
   @Override
   public T next()
   {
    return (T)arr[index++];
   }};
  return ite;
 }
一个不错的java项目: JAVA WEB 项目教程-模仿天猫整站 J2EE版

猜你喜欢

转载自blog.csdn.net/wanghuiwei888/article/details/78876134