當前位置:首頁 » 編程語言 » java中list

java中list

發布時間: 2022-08-22 23:44:16

『壹』 java list 與map有什麼區別

List:是存儲單列數據的集合,存儲的數據是有序並且是可以重復的


Map:存儲雙列數據的集合,通過鍵值對存儲數據,存儲 的數據是無序的,Key值不能重復,value值可以重復key和value是一一對應的

Collection介面

Collection是Java中最基本的集合介面。它描述了一組有關集合操作的方法。

  • int Size(); //集合大小

  • boolean isEmpty(); //是否為空

  • boolean contains(Object o); //是否包含某個對象

  • Iterator<E> iterator(); //返回一個迭代對象,用來遍歷集合中的元素

  • Object[] toArray(); //將集合中的元素以數組形式然後返回

  • <T> T[] toArray(T[] a); //上一個方法的泛型形式

  • boolean add(E e); //將對象e添加進集合,添加成功則返回true

  • boolean remove(Object o); //移除某個元素

  • boolean containsAll(Collection<?> c); //傳入一個集合c,如果c中的元素都存在,則返回true

  • boolean addAll(Collection<? extends E> c); //將集合c中的元素全部添加進本集合

  • boolean removeAll(Collection<?> c); //本集合減去c集合中的元素

  • boolean retainAll(Collection<?> c); //取本集合和c集合的交集

  • void clear(); //清空集合

  • boolean equals(Object o); //判斷相等

  • int hashCode(); //獲取集合當前的hash值

  • Set介面

    Set介面直接繼承自Collection介面,並且方法介面上也一模一樣。Set對添加的元素有一些要求,其不允許出現重復的元素,並且元素之間沒有次序。這相當於一個不允許重復的離散的集合。因此,添加進Set的元素類型需要定義equals方法。若是使用自定義的類,則應該重寫equals方法來確保實現自己需要的功能。

    Set介面主要實現了兩個類:HashSet,TreeSet。

    HashSet是按照哈希來存取元素的,因此速度較快。HashSet繼承自抽象類AbstractSet,然後實現了Set、Cloneable、Serializable介面。
    TreeSet也是繼承自AbstractSet,不過不同的是其實現的是NavigableSet介面。而NavigableSet繼承自SortedSet。SortedSet是一個有序的集合。其添加的元素必須實現了Comparable介面,因為其在添加一個元素的時候需要進行排序。NavigableSet則提供了更多的有關元素次序的方法。


  • LinkedHashSet也是Set的一個實現。和HashSet類似,只不過內部用鏈表來維護,按照元素插入次序來保存。

    List介面

    List介面也是繼承自Collection。與Set不同的是,List可以存儲重復的元素。主要有兩種實現:ArrayList和LinkedList。
    ArrayList沒有什麼好說的,就像傳統的數組一樣,有著很快的隨機存取速度,但是插入刪除的速度就很慢。
    LinkedList則與ArrayList恰恰相反,因為用鏈表來保存數據,所以插入刪除元素的速度很快,但是訪問數據的速度就不如ArrayList了。

    Map介面

    Map(映射)是一個存儲鍵值對的容器介面。每一個元素包含一個key對象和value對象,且元素不允許重復。
    Map介面的實現有以下幾個:
    HashMap是最常用的一個實現。HashMap使用hash映射來存取數據,這個速度是相當快,是O(1)的速度。其容量capacity,和負載因子load factor可以在一開始設定。當元素個數達到capacity*load factor的時候,就會進行擴容。
    LinkedHashMap和HashMap類似,只不過內部用鏈表來維護次序。因此遍歷時候的順序是其插入順序。
    TreeMap是基於紅黑樹的Map,插入的數據被有次序保存,並且有很高的效率。因此在遍歷輸出的時候可以得到排序的數據。但是這要求插入的數據實現了comparable介面。

    總結

  • Collection、Set、List和Map都是介面,不能被實例化。

  • Set和List都繼承自Collection,而Map則和Collection沒什麼關系。

  • Set和List的區別在於Set不能重復,而List可以重復。

  • Map和Set與List的區別在於,Map是存取鍵值對,而另外兩個則是保存一個元素。

希望對您有所幫助!~

『貳』 java中list後面加<>是什麼意思

這是泛型,保證List傳入類型跟ArrayList傳入類型一致;例如:List<String> list = new ArrayList<Integer>();

以上代碼List指定類型是String,而真正傳入的Integer這樣編譯是不會通過的。

如果List指定了泛型,那麼編譯就會檢測,如果不定義泛型,編譯通過,運行不合理值會報錯。

泛型(Generic type 或者generics)是對Java語言的類型系統的一種擴展,以支持創建可以按類型進行參數化的類。可以把類型參數看作是使用參數化類型時指定的類型的一個佔位符,就像方法的形式參數是運行時傳遞的值的佔位符一樣。

用法:

實際上有兩種List:一種是基本的ArrayList,其優點在於隨機訪問元素,另一種是更強大的LinkedList,它並不是為快速隨機訪問設計的,而是具有一套更通用的方法。次序是List最重要的特點:它保證維護元素特定的順序。

List為Collection添加了許多方法,使得能夠向List中間插入與移除元素(這只推薦LinkedList使用)。一個List可以生成ListIterator,使用它可以從兩個方向遍歷List,也可以從List中間插入和移除元素。

以上內容參考:網路-java列表

『叄』 java中List怎麼用,說下過程

Lei
lei=(Lei)list.get(i);//這個語句本身沒有錯的,不過如果你要list
裡面裝的不是Lei
類形或不是他的子類
會拋class
cast
exception
;
你可以用泛形的
List
list
=new
LinkedList
();
這樣list就只能add
Lei
類型的對象,
list.get(int
i)獲得的也是Lei
類型這樣就不用轉換。
注意一下,如果你用的是LinkedList
的話不要用for
循環來遍歷List
而要用Iterator,不然的話效率會很低的。

『肆』 java中list的用法

list作為一個集合,可以用來存放數據.
比如ArrayList list=new ArrayList();
list.add();
可以把數據封裝在集合中進行使用.就好像你用貨車來裝你的數據,而不是一個一個的去搬運數據.

『伍』 Java List 用法

importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;

publicclassListDemo{
publicstaticvoidmain(String[]args){
Listlist=newArrayList();
//添加常規元素
list.add("hello");
list.add("world");
list.add("test");
System.out.println(list);

//插入一個新元素
list.add(2,"insertintoanewwordinthe2place");
System.out.println(list);

//刪除
list.remove(1);
System.out.println("remove:"+list);

//獲取
System.out.println("第二個list元素是:"+list.get(1));
System.out.println("bcde的索引位置是:"+list.indexOf("bcde"));

//修改
list.set(1,"listsetelement");
System.out.println("修改第二個元素:"+list);

//迭代取出集合中的所有元素
for(Iteratoriterator=list.iterator();iterator.hasNext();){
System.out.println("迭代取出集合中的所有元素:"+iterator.next());
}

//list集合特有的取出方式
for(inti=0;i<list.size();i++){
System.out.println("list集合特有的取出方式:"+list.get(i));
}
}
}

『陸』 java中List<>是什麼意思

List指的是集合.<>是泛型,裡面指定了這個集合中存放的是什麼數據.
比如有一個學生類Student,Student裡麵包含了學生的一些信息.這樣每一個Student對象就代表了一個學生.此時List<Student>就代表這個集合中存放了很多個學生對象,這個集合就像一個班級一樣.

『柒』 java中List的用法盡量詳細解釋,包括例子。

import java.util.*;
public class TestList {
public static void main(String[] args) {
List li = new ArrayList();
li.add("a");
li.add("b");
li.add("c");
li.add("d");
li.add("d");
li.add("d");
for(int i=0;i<li.size();i++) {
System.out.print((String)li.get(i)+" ");
}
System.out.println();
li.add(2,"cc");
System.out.println(li);
System.out.println(li.indexOf("d"));
System.out.println((String)li.remove(1));
System.out.println((String)li.set(4,"e"));
System.out.println(li);

}
}

『捌』 JAVA中的List的使用

List<E>([]內的內容可省略),與數組類似:
實例化:List[<數據類型>] list = new ArrayList[<數據類型>]();
獲得集合內元素個數:list.size();

添加元素:
默認添加:list.add(e);
指定下標添加(添加後下標後的元素向後挪一位):list.add(index,e);

刪除元素:
返回是否刪除:list.remove(e);
直接刪除指定下標的元素(只刪除找到的第一個相符合的元素):list.remove(index);

替換元素(替換掉指定下標的元素):list.set(index,e);

取出元素:list.get(index);

清空集合:list.clear();

判斷集合中是否存在某個元素(存在返回true,不存在返回false):list.contains(e);

對比兩個集合中的所有元素:
兩個對象一定相等:list.equals(list2);
兩個對象不一定相等:list.hashCode() == list2.hashCode();
(兩個相等對象的equals方法一定為true, 但兩個hashcode相等的對象不一定是相等的對象。)

獲得元素下標:
元素存在則返回找到的第一個元素的下標,不存在則返回-1:list.indexOf(e);
元素存在則返回找到的最後一個元素的下標,不存在則返回-1:list.lastIndexOf(e);

判斷集合是否為空(空則返回true,非空則返回false):list.isEmpty();

返回Iterator集合對象:list.iterator();

將集合轉換為字元串:list.toString();

截取集合(從fromIndex開始在toIndex前結束,[fromIndex,toIndex)):list.subList(fromIndex,toIndex);

將集合轉換為數組:
默認類型:list.toArray();
指定類型(objects為指定類型的數組對象,並將轉換好的數組賦值給objects數組):list.toArray(objects);

以上為List常用的方法。

『玖』 誰能通俗解釋一下java中List的用法或者作用

如果是圖形界面編程中的List就是一個列表,用來顯示數據;
如果是java.util.List介面的話,它是一種數據結構,提供基本的增刪改查等方法,它的具體實現ArrayList和LinkedList用的比較多。詳細的需要查看API,這是很常用的一種數據結構,建議樓主好好看API

『拾』 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是線程安全的。

熱點內容
我的世界搭建無正版驗證伺服器 發布:2024-05-05 17:03:48 瀏覽:817
我的世界伺服器地址寶可夢 發布:2024-05-05 17:00:16 瀏覽:254
dede企業源碼 發布:2024-05-05 16:57:53 瀏覽:786
如何查看java版本 發布:2024-05-05 16:45:05 瀏覽:494
轉子繞組電動機控制櫃如何配置 發布:2024-05-05 16:45:04 瀏覽:917
搭建游戲要多大伺服器 發布:2024-05-05 16:44:16 瀏覽:346
雲伺服器ecs網站 發布:2024-05-05 16:35:55 瀏覽:563
c語言列印正方形 發布:2024-05-05 16:09:20 瀏覽:643
編程用箭頭 發布:2024-05-05 15:54:21 瀏覽:794
步驟條源碼 發布:2024-05-05 15:35:55 瀏覽:846