當前位置:首頁 » 服務存儲 » arraylist是鏈接存儲
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

arraylist是鏈接存儲

發布時間: 2022-09-13 03:30:50

⑴ LinkedList和ArrayList的區別

一般大家都知道ArrayList和LinkedList的大致區別:
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。
3.對於新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。

ArrayList和LinkedList是兩個集合類,用於存儲一系列的對象引用(references)。例如我們可以用ArrayList來存儲一系列的String或者Integer。那麼ArrayList和LinkedList在性能上有什麼差別呢?什麼時候應該用ArrayList什麼時候又該用LinkedList呢?


一.時間復雜度
首先一點關鍵的是,ArrayList的內部實現是基於基礎的對象數組的,因此,它使用get方法訪問列表中的任意一個元素時(random access),它的速度要比LinkedList快。LinkedList中的get方法是按照順序從列表的一端開始檢查,直到另外一端。對LinkedList而言,訪問列表中的某個指定元素沒有更快的方法了。
假設我們有一個很大的列表,它裡面的元素已經排好序了,這個列表可能是ArrayList類型的也可能是LinkedList類型的,現在我們對這個列表來進行二分查找(binary search),比較列表是ArrayList和LinkedList時的查詢速度,看下面的程序:


packagecom.mangocity.test;
importjava.util.LinkedList;
importjava.util.List;
importjava.util.Random;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.Collections;
publicclassTestList...{
publicstaticfinalintN=50000;

publicstaticListvalues;

static...{
Integervals[]=newInteger[N];

Randomr=newRandom();

for(inti=0,currval=0;i<N;i++)...{
vals=newInteger(currval);
currval+=r.nextInt(100)+1;
}

values=Arrays.asList(vals);
}

staticlongtimeList(Listlst)...{
longstart=System.currentTimeMillis();
for(inti=0;i<N;i++)...{
intindex=Collections.binarySearch(lst,values.get(i));
if(index!=i)
System.out.println("***錯誤***");
}
returnSystem.currentTimeMillis()-start;
}
publicstaticvoidmain(Stringargs[])...{
System.out.println("ArrayList消耗時間:"+timeList(newArrayList(values)));
System.out.println("LinkedList消耗時間:"+timeList(newLinkedList(values)));
}
}


我得到的輸出是:ArrayList消耗時間:15
LinkedList消耗時間:2596
這個結果不是固定的,但是基本上ArrayList的時間要明顯小於LinkedList的時間。因此在這種情況下不宜用LinkedList。二分查找法使用的隨機訪問(random access)策略,而LinkedList是不支持快速的隨機訪問的。對一個LinkedList做隨機訪問所消耗的時間與這個list的大小是成比例的。而相應的,在ArrayList中進行隨機訪問所消耗的時間是固定的。
這是否表明ArrayList總是比LinkedList性能要好呢?這並不一定,在某些情況下LinkedList的表現要優於ArrayList,有些演算法在LinkedList中實現時效率更高。比方說,利用Collections.reverse方法對列表進行反轉時,其性能就要好些。
看這樣一個例子,加入我們有一個列表,要對其進行大量的插入和刪除操作,在這種情況下LinkedList就是一個較好的選擇。請看如下一個極端的例子,我們重復的在一個列表的開端插入一個元素:


packagecom.mangocity.test;

importjava.util.*;
publicclassListDemo{
staticfinalintN=50000;
staticlongtimeList(Listlist){
longstart=System.currentTimeMillis();
Objecto=newObject();
for(inti=0;i<N;i++)
list.add(0,o);
returnSystem.currentTimeMillis()-start;
}
publicstaticvoidmain(String[]args){
System.out.println("ArrayList耗時:"+timeList(newArrayList()));
System.out.println("LinkedList耗時:"+timeList(newLinkedList()));
}
}

這時我的輸出結果是:ArrayList耗時:2463



LinkedList耗時:15
這和前面一個例子的結果截然相反,當一個元素被加到ArrayList的最開端時,所有已經存在的元素都會後移,這就意味著數據移動和復制上的開銷。相反的,將一個元素加到LinkedList的最開端只是簡單的未這個元素分配一個記錄,然後調整兩個連接。在LinkedList的開端增加一個元素的開銷是固定的,而在ArrayList的開端增加一個元素的開銷是與ArrayList的大小成比例的。


二.空間復雜度
在LinkedList中有一個私有的內部類,定義如下:


privatestaticclassEntry{
Objectelement;
Entrynext;
Entryprevious;
}


每個Entry對象reference列表中的一個元素,同時還有在LinkedList中它的上一個元素和下一個元素。一個有1000個元素的LinkedList對象將有1000個鏈接在一起的Entry對象,每個對象都對應於列表中的一個元素。這樣的話,在一個LinkedList結構中將有一個很大的空間開銷,因為它要存儲這1000個Entity對象的相關信息。
ArrayList使用一個內置的數組來存儲元素,這個數組的起始容量是10.當數組需要增長時,新的容量按如下公式獲得:新容量=(舊容量*3)/2+1,也就是說每一次容量大概會增長50%。這就意味著,如果你有一個包含大量元素的ArrayList對象,那麼最終將有很大的空間會被浪費掉,這個浪費是由ArrayList的工作方式本身造成的。如果沒有足夠的空間來存放新的元素,數組將不得不被重新進行分配以便能夠增加新的元素。對數組進行重新分配,將會導致性能急劇下降。如果我們知道一個ArrayList將會有多少個元素,我們可以通過構造方法來指定容量。我們還可以通過trimToSize方法在ArrayList分配完畢之後去掉浪費掉的空間。


三.總結
ArrayList和LinkedList在性能上各有優缺點,都有各自所適用的地方,總的說來可以描述如下:
1.對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。對ArrayList而言,主要是在內部數組中增加一項,指向所添加的元素,偶爾可能會導致對數組重新進行分配;而對LinkedList而言,這個開銷是統一的,分配一個內部Entry對象。


2.在ArrayList的中間插入或刪除一個元素意味著這個列表中剩餘的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。


3.LinkedList不支持高效的隨機元素訪問。


4.ArrayList的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間


可以這樣說:當操作是在一列數據的後面添加數據而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;當你的操作是在一列數據的前面或中間添加或刪除數據,並且按照順序訪問其中的元素時,就應該使用LinkedList了。

⑵ arraylist和linkedlist的區別 vectot

一般大家都知道ArrayList和LinkedList的大致區別:


  1. ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。

  2. 對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。

  3. 對於新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。


ArrayListLinkedList是兩個集合類,用於存儲一系列的對象引用(references)。

例如我們可以用ArrayList來存儲一系列的String或者Integer。

那麼ArrayList和LinkedList在性能上有什麼差別呢?

什麼時候應該用ArrayList什麼時候又該用LinkedList呢?


一.時間復雜度
首先一點關鍵的是,ArrayList的內部實現是基於基礎的對象數組的,因此,它使用get方法訪問列表中的任意一個元素時(random access),它的速度要比LinkedList快。


LinkedList中的get方法是按照順序從列表的一端開始檢查,直到另外一端。

對LinkedList而言,訪問列表中的某個指定元素沒有更快的方法了。


假設我們有一個很大的列表,它裡面的元素已經排好序了,這個列表可能是ArrayList類型的也可能是LinkedList類型的,

現在我們對這個列表來進行二分查找(binary search),比較列表是ArrayList和LinkedList時的查詢速度,看下面的程序:

packagecom.mangocity.test;
importjava.util.LinkedList;
importjava.util.List;
importjava.util.Random;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.Collections;
publicclassTestList...{
publicstaticfinalintN=50000;

publicstaticListvalues;

static...{
Integervals[]=newInteger[N];

Randomr=newRandom();

for(inti=0,currval=0;i<N;i++)...{
vals=newInteger(currval);
currval+=r.nextInt(100)+1;
}

values=Arrays.asList(vals);
}

staticlongtimeList(Listlst)...{
longstart=System.currentTimeMillis();
for(inti=0;i<N;i++)...{
intindex=Collections.binarySearch(lst,values.get(i));
if(index!=i)
System.out.println("***錯誤***");
}
returnSystem.currentTimeMillis()-start;
}
publicstaticvoidmain(Stringargs[])...{
System.out.println("ArrayList消耗時間:"+timeList(newArrayList(values)));
System.out.println("LinkedList消耗時間:"+timeList(newLinkedList(values)));
}
}


我得到的輸出是:ArrayList消耗時間:15
LinkedList消耗時間:2596


這個結果不是固定的,但是基本上ArrayList的時間要明顯小於LinkedList的時間。

因此在這種情況下不宜用LinkedList。

二分查找法使用的隨機訪問(random access)策略,而LinkedList是不支持快速的隨機訪問的。

對一個LinkedList做隨機訪問所消耗的時間與這個list的大小是成比例的。

而相應的,在ArrayList中進行隨機訪問所消耗的時間是固定的。


這是否表明ArrayList總是比LinkedList性能要好呢?

這並不一定,在某些情況下LinkedList的表現要優於ArrayList,有些演算法在LinkedList中實現時效率更高。比方說,利用Collections.reverse方法對列表進行反轉時,其性能就要好些。


看這樣一個例子,加入我們有一個列表,要對其進行大量的插入和刪除操作,在這種情況下LinkedList就是一個較好的選擇。

請看如下一個極端的例子,我們重復的在一個列表的開端插入一個元素:


packagecom.mangocity.test;

importjava.util.*;
publicclassListDemo{
staticfinalintN=50000;
staticlongtimeList(Listlist){
longstart=System.currentTimeMillis();
Objecto=newObject();
for(inti=0;i<N;i++)
list.add(0,o);
returnSystem.currentTimeMillis()-start;
}
publicstaticvoidmain(String[]args){
System.out.println("ArrayList耗時:"+timeList(newArrayList()));
System.out.println("LinkedList耗時:"+timeList(newLinkedList()));
}
}

這時我的輸出結果是:

ArrayList耗時:2463
LinkedList耗時:15


這和前面一個例子的結果截然相反,當一個元素被加到ArrayList的最開端時,所有已經存在的元素都會後移,這就意味著數據移動和復制上的開銷。

相反的,將一個元素加到LinkedList的最開端只是簡單的未這個元素分配一個記錄,然後調整兩個連接。

在LinkedList的開端增加一個元素的開銷是固定的,而在ArrayList的開端增加一個元素的開銷是與ArrayList的大小成比例的。


二.空間復雜度
在LinkedList中有一個私有的內部類,定義如下:

privatestaticclassEntry{
Objectelement;
Entrynext;
Entryprevious;
}


每個Entry對象reference列表中的一個元素,同時還有在LinkedList中它的上一個元素和下一個元素。一個有1000個元素的LinkedList對象將有1000個鏈接在一起的Entry對象,每個對象都對應於列表中的一個元素。

這樣的話,在一個LinkedList結構中將有一個很大的空間開銷,因為它要存儲這1000個Entity對象的相關信息。


ArrayList使用一個內置的數組來存儲元素,這個數組的起始容量是10.當數組需要增長時,新的容量按如下公式獲得:新容量=(舊容量*3)/2+1,也就是說每一次容量大概會增長50%。

這就意味著,如果你有一個包含大量元素的ArrayList對象,那麼最終將有很大的空間會被浪費掉,這個浪費是由ArrayList的工作方式本身造成的。

如果沒有足夠的空間來存放新的元素,數組將不得不被重新進行分配以便能夠增加新的元素。對數組進行重新分配,將會導致性能急劇下降。

如果我們知道一個ArrayList將會有多少個元素,我們可以通過構造方法來指定容量。我們還可以通過trimToSize方法在ArrayList分配完畢之後去掉浪費掉的空間。


三.總結

ArrayList和LinkedList在性能上各有優缺點,都有各自所適用的地方,總的說來可以描述如下:


1.對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。對ArrayList而言,主要是在內部數組中增加一項,指向所添加的元素,偶爾可能會導致對數組重新進行分配;而對LinkedList而言,這個開銷是統一的,分配一個內部Entry對象。


2.在ArrayList的中間插入或刪除一個元素意味著這個列表中剩餘的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。


3.LinkedList不支持高效的隨機元素訪問。


4.ArrayList的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間


可以這樣說:當操作是在一列數據的後面添加數據而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;當你的操作是在一列數據的前面或中間添加或刪除數據,並且按照順序訪問其中的元素時,就應該使用LinkedList了。

⑶ arraylist和linkedlist的區別 遍歷速度

就是數組和鏈表的區別。

使用iterator遍歷沒有速度區別

根據下標訪問時,ArrayList速度快 直接讀取到該對象,而LinkedList要從第一個對象一個個的向後尋找直到找到該下標的對象

插入與刪除對象時,LinkedList速度快 直接修改鏈接,而ArrayList里在被操作對象之後的所有對象要向前或後移動。

⑷ arraylist是怎麼存儲的

把 class player 中的屬性添加get和set方法
然後new 一個plater對象
Player player=new Player();
對他的屬性調用set方法賦值

然後List list=new ArrayList();
調用 list.add(player) 把你賦值的Player對象放入arraylist中()
取出來的時候用循環遍歷 list.get(index) //index是ArrayList的下標

代碼就是
Player player=new Player();
List list= new ArrayList();
player.setUsername("張三");
player.setFamilyname("張");
.....
list.add(player);

//從list中取出Player對象
for(int i=0;i<list.size();i++){

Player playerCopy=list.get(i);
//顯示封裝的對象信息
System.out.println("player的內容"+playerCopy.getUsername());
System.out.println("player的內容"+playerCopy.getFamilyname());
System.out.println("lplayerCopy的內容"+playerCopy.getUsername());
System.out.println("playerCopy的內容"+playerCopy.getFamilyname());
}

⑸ hashmap是以什麼方式存儲數據 arraylist又是以什麼方式存儲數據

hashmap 就是表,說通俗點就是一個可以理解為 兩列多行 的表格,第一列中存儲索引或者起標示作用的對象,第二列存儲我們實際要用的對象,當我們需要第二列中某個對象時,就去找這個對象的索引(就是對應它的第一列的對象),arraylist 內部是以數組來儲存數據的,它是一個「長度可變」的數組

⑹ ArrayList和LinkedList區別,舉例說明下

一般大家都知道ArrayList和LinkedList的大致區別:
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。
3.對於新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。

ArrayList和LinkedList是兩個集合 類,用於存儲一系列的對象引用(references)。例如我們可以用ArrayList來存儲一系列的String或者Integer。那麼 ArrayList和LinkedList在性能上有什麼差別呢?什麼時候應該用ArrayList什麼時候又該用LinkedList呢?
一.時間復 雜度
首先一點關鍵的是,ArrayList的內部實現是基於基礎的對象數組的,因此,它使用get方法訪問列表中的任意一個元素時 (random access),它的速度要比LinkedList快。LinkedList中的get方法是按照順序從列表的一端開始檢查,直到另外一端。對 LinkedList而言,訪問列表中的某個指定元素沒有更快的方法了。
假設我們有一個很大的列表,它裡面的元素已經排好序了,這個列表可能是ArrayList類型 的也可能是LinkedList類型的,現在我們對這個列表來進行二分查找(binary search),比較列表是ArrayList和LinkedList時的查詢速度,看下面的程序:Java代碼 package com.mangocity.test; import java.util.LinkedList; import java.util.List; import java.util.Random; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; public class TestList ...{ public static final int N=50000; public static List values; static...{ Integer vals[]=new Integer[N]; Random r=new Random(); for(int i=0,currval=0;i<N;i++)...{ vals=new Integer(currval); currval+=r.nextInt(100)+1; } values=Arrays.asList(vals); } static long timeList(List lst)...{ long start=System.currentTimeMillis(); for(int i=0;i<N;i++)...{ int index=Collections.binarySearch(lst, values.get(i)); if(index!=i) System.out.println("***錯誤***"); } return System.currentTimeMillis()-start; } public static void main(String args[])...{ System.out.println("ArrayList消耗時間:"+timeList(new ArrayList(values))); System.out.println("LinkedList消耗時間:"+timeList(new LinkedList(values))); } } package com.mangocity.test; import java.util.LinkedList; import java.util.List; import java.util.Random; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; public class TestList ...{ public static final int N=50000; public static List values; static...{ Integer vals[]=new Integer[N]; Random r=new Random(); for(int i=0,currval=0;i<N;i++)...{ vals=new Integer(currval); currval+=r.nextInt(100)+1; } values=Arrays.asList(vals); } static long timeList(List lst)...{ long start=System.currentTimeMillis(); for(int i=0;i<N;i++)...{ int index=Collections.binarySearch(lst, values.get(i)); if(index!=i) System.out.println("***錯誤***"); } return System.currentTimeMillis()-start; } public static void main(String args[])...{ System.out.println("ArrayList消耗時間:"+timeList(new ArrayList(values))); System.out.println("LinkedList消耗時間:"+timeList(new LinkedList(values))); } }
我得到的輸出 是:ArrayList消耗時間:15
LinkedList消耗時間:2596
這個結果不是固定的,但是基本上ArrayList的 時間要明顯小於LinkedList的時間。因此在這種情況下不宜用LinkedList。二分查找法使用的隨機訪問(random access)策略,而LinkedList是不支持快速的隨機訪問的。對一個LinkedList做隨機訪問所消耗的時間與這個list的大小是成比例 的。而相應的,在ArrayList中進行隨機訪問所消耗的時間是固定的。
這是否表明ArrayList總是比LinkedList性能要好呢?這並不一定,在某些情況 下LinkedList的表現要優於ArrayList,有些演算法在LinkedList中實現時效率更高。比方說,利用 Collections.reverse方法對列表進行反轉時,其性能就要好些。
看這樣一個例子,加入我們有一個列表,要對其進行大量的插入和刪除操作,在這種情況下 LinkedList就是一個較好的選擇。請看如下一個極端的例子,我們重復的在一個列表的開端插入一個元素:
Java代碼 package com.mangocity.test; import java.util.*; public class ListDemo { static final int N=50000; static long timeList(List list){ long start=System.currentTimeMillis(); Object o = new Object(); for(int i=0;i<N;i++) list.add(0, o); return System.currentTimeMillis()-start; } public static void main(String[] args) { System.out.println("ArrayList耗時:"+timeList(new ArrayList())); System.out.println("LinkedList耗時:"+timeList(new LinkedList())); } } package com.mangocity.test; import java.util.*; public class ListDemo { static final int N=50000; static long timeList(List list){ long start=System.currentTimeMillis(); Object o = new Object(); for(int i=0;i<N;i++) list.add(0, o); return System.currentTimeMillis()-start; } public static void main(String[] args) { System.out.println("ArrayList耗時:"+timeList(new ArrayList())); System.out.println("LinkedList耗時:"+timeList(new LinkedList())); } } 這時我的輸出結果是:ArrayList耗時:2463</SPAN>
LinkedList耗時:15
這和前面一個例子的結果截然相反,當一個元素被加到ArrayList的最開端時,所有已經存在的元素都會後 移,這就意味著數據移動和復制上的開銷。相反的,將一個元素加到LinkedList的最開端只是簡單的未這個元素分配一個記錄,然後調整兩個連接。在 LinkedList的開端增加一個元素的開銷是固定的,而在ArrayList的開端增加一個元素的開銷是與ArrayList的大小成比例的。
二.空間復 雜度
在LinkedList中有一個私有的內部類,定義如下:Java代碼 private static class Entry { Object element; Entry next; Entry previous; } private static class Entry { Object element; Entry next; Entry previous; }
每個Entry對象 reference列表中的一個元素,同時還有在LinkedList中它的上一個元素和下一個元素。一個有1000個元素的LinkedList對象將 有1000個鏈接在一起的Entry對象,每個對象都對應於列表中的一個元素。這樣的話,在一個LinkedList結構中將有一個很大的空間開銷,因為 它要存儲這1000個Entity對象的相關信息。
ArrayList使用一個內置的數組來存儲元素,這個數組的起始容量是10.當數組需要增長時,新的容量按 如下公式獲得:新容量=(舊容量*3)/2+1,也就是說每一次容量大概會增長50%。這就意味著,如果你有一個包含大量元素的ArrayList對象, 那麼最終將有很大的空間會被浪費掉,這個浪費是由ArrayList的工作方式本身造成的。如果沒有足夠的空間來存放新的元素,數組將不得不被重新進行分 配以便能夠增加新的元素。對數組進行重新分配,將會導致性能急劇下降。如果我們知道一個ArrayList將會有多少個元素,我們可以通過構造方法來指定 容量。我們還可以通過trimToSize方法在ArrayList分配完畢之後去掉浪費掉的空間。
三.總結
ArrayList和LinkedList在性能上各 有優缺點,都有各自所適用的地方,總的說來可以描述如下:
1.對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。對 ArrayList而言,主要是在內部數組中增加一項,指向所添加的元素,偶爾可能會導致對數組重新進行分配;而對LinkedList而言,這個開銷是 統一的,分配一個內部Entry對象。
2.在ArrayList的 中間插入或刪除一個元素意味著這個列表中剩餘的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。
3.LinkedList不 支持高效的隨機元素訪問。
4.ArrayList的空 間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間
可以這樣說:當操作是在一列 數據的後面添加數據而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;當你的操作是在一列數據的前面或中 間添加或刪除數據,並且按照順序訪問其中的元素時,就應該使用LinkedList了。

⑺ ArrayList、linklist、list的區別

1、ist是一個介面,ArrayList和LinkedList是兩個實現類.

2、他們實現的方式不一樣,其實LinkedList才是真正的鏈表(如果不清楚什麼是鏈表,需要了解一下相關數據結構的知識,這不是一兩句話能說清楚的)

3、而ArrayList是用數組實現的,它不是真正的鏈表,在初始化的時候它先對數組設置一個初始容量,當數組空間不夠的時候,它會重新構建一個容量更大的數組,然後把先前的元素拷貝進去。

4、ArrayList和LinkedList本質上的區別就是數組和列表這兩種數據結構的區別。課參閱相關數據結構的知識。

5、ArrayList:缺點:內存使用量要大一些,添加刪除元素效率較低。元素隨機訪問的效率較高。
LinkedList:相反

(7)arraylist是鏈接存儲擴展閱讀

1、ArrayList就是動態數組,用MSDN中的說法,就是Array的復雜版本,它提供了動態的增加和減少元素,實現了ICollection和IList介面,靈活的設置數組的大小等好處。

2、List介面的大小可變數組的實現,位於API文檔的java.util.ArrayList<E>。實現了所有可選列表操作,並允許包括 null 在內的所有元素。除了實現 List 介面外,此類還提供一些方法來操作內部用來存儲列表的數組的大小。

3、每個 ArrayList 實例都有一個容量。該容量是指用來存儲列表元素的數組的大小。它總是至少等於列表的大小。

4、隨著向 ArrayList 中不斷添加元素,其容量也自動增長。並未指定增長策略的細節,因為這不只是添加元素會帶來分攤固定時間開銷那樣簡單。

5、注意,迭代器的快速失敗行為無法得到保證,因為一般來說,不可能對是否出現不同步並發修改做出任何硬性保證。快速失敗迭代器會盡最大努力拋出 。

⑻ ArrayList 和LinkdList的區別是什麼

ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快

⑼ ArrayList和LinkedList內存放的是什麼呢

ArrayList類似於數組,是按順序存儲在內存的。
LinkedList類似與鏈表,是沒有順序的,是通過指針鏈接了每個元素。
因為LinkedList是無序存儲的,所以插入隨便一個地方都可以,只要指針指向了就行。
而ArrayList是有序的,插入要遍歷到你要插入的位置,所以效率低些。
正因為ArrayList是有序的,所以查詢的時候輸入索引,就可以很快找到,LinkedList則不然。

⑽ ArrayList和LinkedList的區別

ArrayList和LinkedList

共性:ArrayList與LinkedList都是List介面的實現類,因此都實現了List的所有未實現的方法,只是實現的方式有所不同。

區別:List介面的實現方式不同

ArrayList實現了List介面,以數組的方式來實現的,因此對於快速的隨機取得對象的需求,使用ArrayList實現執行效率上會比較好。

LinkedList是採用鏈表的方式來實現List介面的,因此在進行insert和remove動作時效率要比ArrayList高。適合用來實現Stack(堆棧)與Queue(隊列)。



HashTable和HashMap

共性:都實現了Map介面。

區別:

(1)繼承的父類不同

Hashtable繼承自Dictionary類,而HashMap繼承自AbstractMap類。

(2)線程安全性不同

Hashtable的方法是Synchronize的,而HashMap中的方法在預設情況下是非Synchronize的。

(3)提供contains方法

HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因為contains方法容易讓人引起誤解。

Hashtable則保留了contains,containsValue和containsKey三個方法,其中contains和containsValue功能相同。

(4)key和value是否允許null值

Hashtable中,key和value都不允許出現null值。HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。

(5)兩個遍歷方式的內部實現上不同

HashMap使用了 Iterator;Hashtable使用Iterator,Enumeration兩種方式 。

(6)hash值不同

哈希值的使用不同,HashTable直接使用對象的hashCode。而HashMap重新計算hash值。

(7)內部實現使用的數組初始化和擴容方式不同

HashTable在不指定容量的情況下的默認容量為11,增加的方式是 old*2+1;而HashMap為16,Hashtable不要求底層數組的容量一定要為2的整數次冪,而HashMap則要求一定為2的整數次冪。