一、線性表分為順序表和煉表兩大類
二、順序表
1、特點:(1)元素所佔的儲存空間是連續的 (2)元素在儲存空間按邏輯順序存放。
(3)查詢快,增刪慢
2、例如 arraylist: 基於陣列實現,類似於乙個動態陣列,容量可自增的,所以可通過角標獲取指定位置的元素
增加元素: 是建立大容量陣列,複製原陣列,再進行賦值元素的操作。
刪除元素: 複製陣列,將已刪除位置的元素置null。
陣列複製的主要方法: *
@param
src
* the source array to copy the content. 原陣列
*@param
srcpos
* the starting index of the content in . 原陣列要複製的開始位置
*@param
dat
* the destination array to copy the data into. 目標陣列
*@param
dstpos
* the starting index for the copied content in . 目標陣列的開始位置
*@param
length
* the number of elements to be copied. 要複製的長度
* /
public static native voidarraycopy(object src,
intsrcpos,
object dst,
intdstpos,
intlength);
(1)構造:
public class
arraylist
extends
abstractlist
implements
cloneable, serializable, randomaccess
array = (capacity == 0 ? emptyarray.object : new object[capacity]);
}/**
* 建立乙個無參構造的arraylist
*/public arraylist()
/*** 建立乙個包含collection的arraylist
*/public arraylist(collection<? extends e> collection)
object a = collection.toarray();
if (a.getclass() != object.class)
array = a;
size = a.length;
}
(2)新增:
/**
* 新增方法,新增到列表的尾部
* (1、宣告乙個空間大點的新陣列 2、將老陣列複製進去 3、將object賦值進去)
*/
@override
public
boolean
add(e object)
a[s] = object;// 把元素新增進來
size = s + 1;// 長度+1
modcount++;// 計量器,只要陣列中元素動一下,它就+1
return
true;
}/**
* 新增方法,新增到指定位置
* (1、宣告乙個空間大點的新陣列 2、將老陣列複製進去, 移動位置將index空出來 3、將object賦值進index的位置)
*/
@override
public
void
add(
intindex, e object)
// 當陣列長度容量足夠時,執行system.arraycopy方法實現陣列的複製
if (s < a.length) else
a[index] = object;
size = s + 1;
modcount++;
}/**
* 新增方法,將容器中所有元素新增到此列表的尾部
*(1、宣告乙個空間大點的新陣列 2、將要新增的集合轉成陣列 3、將兩個陣列複製到新陣列中)
*/
@override
public
boolean
addall(collection<? extends e> collection)
object a = array;
int s = size;
int newsize = s + newpartsize; // if add overflows, arraycopy will fail
if (newsize > a.length)
system.arraycopy(newpart, 0, a, s, newpartsize);
size = newsize;
modcount++;
return
true;
}
(3)刪除
/**
* 刪除列表中指定位置上的元素
*@param index the index of the object to remove.
*@return the removed object.
*@throws indexoutofbound***ception
* when
*/@override
public e remove(int index)
@suppresswarnings("unchecked") e result = (e) a[index];
// 將刪除位置之後的元素向前挪動乙個位置
system.arraycopy(a, index + 1, a, index, --s - index);
// 將陣列末尾置空
a[s] = null;
size = s;
modcount++;
return result;
}// 刪除列表中首次出現的指定元素(如果存在)
@override
public
boolean
remove(object object)
}} else }}
return
false;}
(4)查詢
/**
* 查詢是否包含某個元素
*/
@override
public
boolean
contains(object object)
}} else }}
return
false;
}
**:
ArrayList部分原始碼
預設初始容量 private static final int default capacity 10 空陣列,有參建構函式,引數為0時,將elementdata陣列賦值為empty elementdata private static final object empty elementdata ...
ArrayList原始碼分析
arraylist是平時使用很多的乙個類,趁有時間,我也閱讀以下原始碼,以幫助自己加深理解。類的層次結構這裡就不列出了,主要分析一下原始碼部分,屬性部分 protected transient int modcount 0 這個屬性是從abstractlist繼承過來的,每次arraylist進行結...
ArrayList原始碼剖析
建構函式 有3個建構函式 1 在jdk原始碼中arraylist無參的建構函式,預設初始化大小是10 2 帶有指定大小引數的建構函式 3 帶有集合引數的建構函式 一 確定arrarlist的容量 1 若arraylist的容量不足以容納當前的全部元素,設定新的容量 原始容量 3 2 1。2 如果擴容...