ArrayList類/Vector類:
1.兩者底層都是數(shù)組結(jié)構(gòu)稠歉;
2.ArrayList:是線程不安全的谜悟,對他的操作并不同步;
3.Vector:線程同步的剥纷;
4.在效率方面ArrayList不用同步涮毫,所以使用效率要高很多瞬欧;
ArrayList 類:
- ArrayList提供了Collection的兩個構(gòu)造函數(shù)贷屎;
Array提供了使用角標操作集合的父類增刪改查的方法:
- 增
(1)void add(int index, E element),注意這里沒有了返回值;
(2)boolean addAll(int index, Collection<? extends E> c);注意這里返回是布爾值艘虎;
這里的index類似于數(shù)組中的index豫尽,從0開始,插入的元素占據(jù)集合中的index角標位置顷帖; - 刪
(1)E remove(int index);這里返回的是被刪除角標位置的元素渤滞;
(2)void removeRange(int fromIndex, int toIndex);刪除from-to角標的元素贬墩。沒有返回值 - 改
(1)public void trimToSize();修改ArrayList的當(dāng)前的大小妄呕,使之等于當(dāng)前集合內(nèi)容的大小陶舞,我們可以用它來節(jié)省內(nèi)存空間。
(2)public E set(int index,E element)绪励;設(shè)置某個角標的值肿孵;返回的是這個角標原來的元素;注意這里不能設(shè)置超越size大小的角標值疏魏;
(3)ensureCapacity(int minCapacity)停做;設(shè)置集合的最小值
-查
(1)根據(jù)角標查:public E get(int index);返回index角標的元素值
(2)根據(jù)對象查: public int indexOf(Object o)大莫;返回該元素的角標蛉腌; - 其他方法
public List<E> subList (int fromIndex, int toIndex);返回一個新集合只厘;該集合中的內(nèi)容為對應(yīng)集合的子集烙丛;
ArrayListDemo:
public class ArrayListDemo {
public static void main(String[] args) {
addTest();
}
public static void addTest(){
ArrayList<String> list = new ArrayList<String>(10);
//collection的添加方法:
list.add("a");
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//List的插入添加方法;
list.add(0, "插入");//插入 a a b c d
List<String> list2 = new ArrayList<String>();
list2.add("44");
list2.add("55");
list2.add("66");
//在某個角標出添加一個集合羔味;
list.addAll(2, list2);//a 44 55 66 a b c d
System.out.println(list.remove("a"));//true
System.out.println(list.remove(7));//d
System.out.println(list.set(6, "我修改了"));//c
list.ensureCapacity(20);
System.out.println(list.size());//雖然修改了集合的最小值但是仍沒有
for(Iterator<String> it = list.iterator(); it.hasNext();){
System.out.print(it.next() + " ");//插入 44 55 66 a b 我修改了
}
List<String> newlist = list.subList(2, 5);
for(Iterator<String> it = newlist.iterator(); it.hasNext();){
System.out.print(it.next() + " ");//55 66 a
}
}
}
Vector類:
與ArrayList類的區(qū)別:
1 Vector的方法都是同步的(Synchronized),是線程安全的(thread-safe)河咽,而ArrayList的方法不是,由于線程的同步必然要影響性能赋元,因此,ArrayList的性能比Vector好忘蟹。
2 當(dāng)Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增加50%的大小,這樣,ArrayList就有利于節(jié)約內(nèi)存空間们陆。-
方法的區(qū)別:
(1)與ArrayList相比Vector多了*element方法:如 void addElement(E obj)寒瓦;用于增加一個元素在集合尾部;
(2)int capacity()返回Vector集合的大衅撼稹杂腰;這里的大小是空間大小,而不是元素的“個數(shù)”椅文;
(3)多了一種迭代方法:public static void VectorTest(){ Vector<String> v = new Vector<>(3); v.addElement("a"); v.addElement("b"); v.addElement("c"); v.addElement("c"); System.out.println(v.capacity());//6增加了一倍 Enumeration<String> en = v.elements(); while(en.hasMoreElements()){ System.out.println(en.nextElement());//a b c c } }
也可用Iterator迭代方法喂很;注意這兩個迭代方法都是線程安全的惜颇。