java中自己實現一個ArrayList
阿新 • • 發佈:2018-12-27
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;
}
}
/*
* 設計一種容器:可以不初始化長度,長度可以自動拓展
*/
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;
}
}