本文目錄一覽:
- 1、Java中List和ArrayList的區別
- 2、java中List的用法?盡量詳細解釋,包括例子。
- 3、JAVA裡面set,map,list的區別是什麼?(盡量詳細)
- 4、java中list後面加是什麼意思?
- 5、java中List是什麼意思?
- 6、java中的list集合怎麼用
Java中List和ArrayList的區別
java中List和ArrayList的區別如下:
List是介面,List特性就是有序,會確保以一定的順序保存元素.
ArrayList是它的實現類,是一個用數組實現的List。
使用方法:
比如:List list = new ArrayList();
這樣做的原因是list就相當於是一個泛型的實現,如果想改變list的類型,只需要:
List list = new LinkedList();//LinkedList也是List的實現類,也是ArrayList的兄弟類
java中List的用法?盡量詳細解釋,包括例子。
List 集合中的對象按照一定的順序排放,裡面的內容可以重複。
List介面實現的類:ArrayList(實現動態數組), Vector(實現動態數組) ,LinkedList(實現鏈表), Stack(實現堆棧)
一 list介面
1.java.util.ArrayList類實現一個可增長的動態數組,平時用的比較多的就是add()方法,其它方法
請參考API幫助文檔。使用該方法向集合內添加對象,並且這些對象是按照一定的順序排列
的,它內部原理是數組實現的,因此處理數據量較大時,不建議使用。
public class TestArrayList {
public static void main(String[] args) {
//聲明List 並實例化為ArrayList
List al = new ArrayList();
//使用add()方法添加元素
al.add(“a”);
al.add(“b”);
al.add(“c”);
al.add(“d”);
//使用Iterator迭代器遍歷出集合的元素並列印
for(Iterator i = al.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
}
}
3.java.util.Vector(向量)類 與ArrayList類似的也是實現一個動態的數組,該向量可以隨意的增長以存放更多的對象
public class TestArrayList {
public static void main(String[] args) {
//聲明List 並實例化為Vector
List al = new Vector();
//使用add()方法添加對象
al.add(“a”);
al.add(“b”);
al.add(“c”);
al.add(“d”);
//使用Iterator迭代器遍歷出集合的對象並列印
for(Iterator i = al.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
}
}
3.java.util.LinkedList類實現了鏈表,可初始化化為空或者已存在的集合,通常使用以下方法
add();向鏈表末尾添加對象。
addFirst()在鏈表開頭添加對象。
addLast()在鏈表末尾添加對象。
getFirst()得到鏈表開頭的對象。
getLast()得到鏈表末尾的對象。
注意該類提供了隨機訪問列表中的元素的方法,但是底層依然必須遍歷去查找隨機訪問的對象,因此性能依然有限.
public static void main(String[] args) {
//聲明LinkedList並實例化
LinkedList al = new LinkedList();
//使用add()方法添加元素
al.add(“a”);
al.add(“b”);
al.add(“c”);
al.add(“d”);
//使用Iterator迭代器遍歷出集合的元素並列印
for(Iterator i = al.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
System.out.println(“_____”);
//向鏈表頭和尾分別添加x和z
al.addFirst(“z”);
al.addLast(“x”);
//遍歷查看添加後的結果
for(Iterator i = al.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
}
4.java.util.Stack類實現了堆棧數據結構,即按照先進後出的原則存放數據。創建時只能為空。
使用push()方法進行添加對象
public static void main(String[] args) {
//聲明Stack並實例化
Stack al = new Stack();
//使用push()方法添加元素
al.push(“a”);
al.push(“b”);
al.push(“c”);
al.push(“d”);
al.push(“f”);
//使用Iterator迭代器遍歷出集合的元素並列印
for(Iterator i = al.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
}
JAVA裡面set,map,list的區別是什麼?(盡量詳細)
一、List介面
List是一個繼承於Collection的介面,即List是集合中的一種。List是有序的隊列,List中的每一個元素都有一個索引;第一個元素的索引值是0,往後的元素的索引值依次+1。和Set不同,List中允許有重複的元素。實現List介面的集合主要有:ArrayList、LinkedList、Vector、Stack。
ArrayList
ArrayList是一個動態數組,也是我們最常用的集合。它允許任何符合規則的元素插入甚至包括null。每一個ArrayList都有一個初始容量:
private static final int DEFAULT_CAPACITY = 10;
隨著容器中的元素不斷增加,容器的大小也會隨著增加。在每次向容器中增加元素的同時都會進行容量檢查,當快溢出時,就會進行擴容操作。所以如果我們明確所插入元素的多少,最好指定一個初始容量值,避免過多的進行擴容操作而浪費時間、效率。
size、isEmpty、get、set、iterator 和 listIterator 操作都以固定時間運行。add 操作以分攤的固定時間運行,也就是說,添加 n 個元素需要 O(n) 時間(由於要考慮到擴容,所以這不只是添加元素會帶來分攤固定時間開銷那樣簡單)。
ArrayList擅長於隨機訪問。同時ArrayList是非同步的。
LinkedList
同樣實現List介面的LinkedList與ArrayList不同,ArrayList是一個動態數組,而LinkedList是一個雙向鏈表。所以它除了有ArrayList的基本操作方法外還額外提供了get,remove,insert方法在LinkedList的首部或尾部。
由於實現的方式不同,LinkedList不能隨機訪問,它所有的操作都是要按照雙重鏈表的需要執行。在列表中索引的操作將從開頭或結尾遍歷列表(從靠近指定索引的一端,節約一半時間)。這樣做的好處就是可以通過較低的代價在List中進行插入和刪除操作。
與ArrayList一樣,LinkedList也是非同步的。如果多個線程同時訪問一個List,則必須自己實現訪問同步。一種解決方法是在創建List時構造一個同步的List:
List list = Collections.synchronizedList(new LinkedList(…));
Vector
與ArrayList相似,但是Vector是同步的。所以說Vector是線程安全的動態數組。它的操作與ArrayList幾乎一樣。
Stack
Stack繼承自Vector,實現一個後進先出的堆棧。Stack提供5個額外的方法使得Vector得以被當作堆棧使用。基本的push和pop方法,還有peek方法得到棧頂的元素,empty方法測試堆棧是否為空,search方法檢測一個元素在堆棧中的位置。Stack剛創建後是空棧。
二、Set介面
Set是一個繼承於Collection的介面,Set是一種不包括重複元素的Collection。它維持它自己的內部排序,所以隨機訪問沒有任何意義。與List一樣,它同樣運行null的存在但是僅有一個。由於Set介面的特殊性,所有傳入Set集合中的元素都必須不同,關於API方面。Set的API和Collection完全一樣。實現了Set介面的集合有:HashSet、TreeSet、LinkedHashSet、EnumSet。
HashSet
HashSet堪稱查詢速度最快的集合,因為其內部是以HashCode來實現的。集合元素可以是null,但只能放入一個null。它內部元素的順序是由哈希碼來決定的,所以它不保證set的迭代順序;特別是它不保證該順序恆久不變。
TreeSet
TreeSet是二叉樹實現的,基於TreeMap,生成一個總是處於排序狀態的set,內部以TreeMap來實現,不允許放入null值。它是使用元素的自然順序對元素進行排序,或者根據創建Set時提供的 Comparator 進行排序,具體取決於使用的構造方法。
LinkedHashSet
LinkedHashSet集合同樣是根據元素的hashCode值來決定元素的存儲位置,但是它同時使用鏈表維護元素的次序。這樣使得元素看起 來像是以插入順序保存的,也就是說,當遍歷該集合時候,LinkedHashSet將會以元素的添加順序訪問集合的元素。LinkedHashSet在迭代訪問Set中的全部元素時,性能比HashSet好,但是插入時性能稍微遜色於HashSet。
三、Map介面
Map與List、Set介面不同,它是由一系列鍵值對組成的集合,提供了key到Value的映射。在Map中它保證了key與value之間的一一對應關係。也就是說一個key對應一個value,所以它不能存在相同的key值,當然value值可以相同。實現map的集合有:HashMap、HashTable、TreeMap、WeakHashMap。
HashMap
以哈希表數據結構實現,查找對象時通過哈希函數計算其位置,它是為快速查詢而設計的,其內部定義了一個hash表數組(Entry[] table),元素會通過哈希轉換函數將元素的哈希地址轉換成數組中存放的索引,如果有衝突,則使用散列鏈表的形式將所有相同哈希地址的元素串起來,可能通過查看HashMap.Entry的源碼它是一個單鏈表結構。
HashTable
也是以哈希表數據結構實現的,解決衝突時與HashMap也一樣也是採用了散列鏈表的形式。HashTable繼承Dictionary類,實現Map介面。其中Dictionary類是任何可將鍵映射到相應值的類(如 Hashtable)的抽象父類。每個鍵和每個值都是一個對象。在任何一個 Dictionary 對象中,每個鍵至多與一個值相關聯。Map是」key-value鍵值對」介面。 HashTable採用」拉鏈法」實現哈希表不過性能比HashMap要低。
TreeMap
有序散列表,實現SortedMap介面,底層通過紅黑樹實現。
WeakHashMap
談WeakHashMap前先看一下Java中的引用(強度依次遞減)
強引用:普遍對象聲明的引用,存在便不會GC
軟引用:有用但並非必須,發生內存溢出前,二次回收
弱引用:只能生存到下次GC之前,無論是否內存足夠
虛引用:唯一目的是在這個對象被GC時能收到一個系統通知
以弱鍵實現的基於哈希表的Map。在 WeakHashMap 中,當某個鍵不再正常使用時,將自動移除其條目。更精確地說,對於一個給定的鍵,其映射的存在並不阻止垃圾回收器對該鍵的丟棄,這就使該鍵成為可終止的,被終止,然後被回收。丟棄某個鍵時,其條目從映射中有效地移除,因此,該類的行為與其他的 Map 實現有所不同。null值和null鍵都被支持。該類具有與HashMap類相似的性能特徵,並具有相同的效能參數初始容量和載入因子。像大多數集合類一樣,該類是不同步的。
四、總結
1、List、Set都是繼承自Collection介面,Map則不是。
2、List特點:元素有放入順序,元素可重複 ,Set特點:元素無放入順序,元素不可重複,重複元素會覆蓋掉,(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的,加入Set 的Object必須定義equals()方法 ,另外list支持for循環,也就是通過下標來遍歷,也可以用迭代器,但是set只能用迭代,因為他無序,無法用下標來取得想要的值。)
3、Set和List對比:
Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。
List:和數組類似,List可以動態增長,查找元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變。
4、Map適合儲存鍵值對的數據
5、線程安全集合類與非線程安全集合類 :
LinkedList、ArrayList、HashSet是非線程安全的,Vector是線程安全的;
HashMap是非線程安全的,HashTable是線程安全的;
StringBuilder是非線程安全的,StringBuffer是線程安全的。
java中list後面加是什麼意思?
這是泛型,保證List傳入類型跟ArrayList傳入類型一致;例如:ListString list = new ArrayListInteger();
以上代碼List指定類型是String,而真正傳入的Integer這樣編譯是不會通過的。
如果List指定了泛型,那麼編譯就會檢測,如果不定義泛型,編譯通過,運行不合理值會報錯。
泛型(Generic type 或者generics)是對Java語言的類型系統的一種擴展,以支持創建可以按類型進行參數化的類。可以把類型參數看作是使用參數化類型時指定的類型的一個佔位符,就像方法的形式參數是運行時傳遞的值的佔位符一樣。
用法:
實際上有兩種List:一種是基本的ArrayList,其優點在於隨機訪問元素,另一種是更強大的LinkedList,它並不是為快速隨機訪問設計的,而是具有一套更通用的方法。次序是List最重要的特點:它保證維護元素特定的順序。
List為Collection添加了許多方法,使得能夠向List中間插入與移除元素(這隻推薦LinkedList使用)。一個List可以生成ListIterator,使用它可以從兩個方向遍歷List,也可以從List中間插入和移除元素。
以上內容參考:百度百科-java列表
java中List是什麼意思?
List指的是集合.是泛型,裡面指定了這個集合中存放的是什麼數據.
比如有一個學生類Student,Student裡面包含了學生的一些信息.這樣每一個Student對象就代表了一個學生.此時ListStudent就代表這個集合中存放了很多個學生對象,這個集合就像一個班級一樣.
java中的list集合怎麼用
ListString list = new ArrayListString();//創建集合對象;
list.Add(“1”);//在集合里存入數據
list.Add(“2”);
List是一個介面,不能實例化,創建對象時要使用他的實現類ArrayList(其他);
看看
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/287014.html