Collection算是最頂級的一個接口,其中定義了一些集合很共性的方法,如size(),isEmpty(),add(),remove()等等,能夠說是集合的規範數組
1、List(list最多見的的實現類有 ArrayList、linkedList、Queue等)ide
一、ArrayListthis
ArrayList是List接口的具體實現類,重寫一下arrayList的主要方法:spa
public class MyList extends List {
//整個集合中最關鍵的部分,得有一個數組來存放數據
private Object[] elementData;
//數組得有長度,保存幾個數據長度就爲幾
private Integer size;
public MyList(){
//初始化爲10
this.elementData = new Object[10];
this.size = 0;
}
//添加方法,在List接口中 add方法的返回類型是boolean
public boolean add (Object obj){
/**
* 若是要添加的數據已經超過了數字的大小,則從新建立更大的數組
*
* 而且將原來的數組複製到新建立的數組中
*/
if(size >=elementData.length){
/**
* 底層的寫法是這樣,
* elementData.length << 1 至關於 elementData.length * 2
*/
// Object[] temp = new Object[elementData.length + (elementData.length << 1) ];
/**
* 建立一個容量更大到數組
*/
Object[] temp = new Object[elementData.length *2 ];
/**
* 將原來數組中的數據複製到新建的數組中
*
* System.arraycopy()方法所須要的參數註解:
*
* src the source array. 源數組(要複製的數組)
*
* srcPos starting position in the source array. 源數組中開始複製的位置
*
* dest the destination array. 目標數組 (新建的數組)
*
* destPos starting position in the destination data. 將源數組中的數據複製到新數組的哪一個位置
*
* length the number of array elements to be copied.要複製的源數組元素的數目
*/
System.arraycopy(elementData,0,temp,0,size);
elementData = temp;
}
//保存數據
elementData[size++] = obj;
return true;
}
@Override
public String toString() {
String value = "";
for (int i =0; i<elementData.length;i++){
if(elementData[i]!=null){
if(value.equals("")){
value=String.valueOf(elementData[i]);
}else {
value+=","+elementData[i];
}
}
}
return "["+value+"]";
}
}
因爲ArrayList的特性,因此ArrayList添加比較慢,查找、遍歷比較快3d
二、linkedListblog
最主要的就是其中add方法的理解,以下圖接口