❶ java集合有哪些
集合類型主要有3種:set(集)、list(列表)和map(映射)。
1、List(有序、可重復)
List里存放的對象是有序的,同時也是可以重復的,List關注的是索引,擁有一系列和索引相關的方法,查詢速度快。因為往list集合里插入或刪除數據時,會伴隨著後面數據的移動,所有插入刪除數據速度慢。
2、Set(無序、不能重復)
Set里存放的對象是無序,不能重復的,集合中的對象不按特定的方式排序,只是簡單地把對象加入集合中。
3、Map(鍵值對、鍵唯一、值不唯一)
Map集合中存儲的是鍵值對,鍵不能重復,值可以重復。根據鍵得到值,對map集合遍歷時先得到鍵的set集合,對set集合進行遍歷,得到相應的值。
(1)javalistmap擴展閱讀:
JAVA集合類型四種常見輸出方式:
1、Iterator:迭代輸出,是使用最多的輸出方式。
2、ListIterator:是Iterator的子介面,專門用於輸出List中的內容。
3、foreach輸出:JDK1.5之後提供的新功能,可以輸出數組或集合。
4、for循環。
代碼示例如下:
for的形式:for(inti=0;i<arr.size();i++){...}
foreach的形式:for(inti:arr){...}
iterator的形式:
Iterator it = arr.iterator();
while(it.hasNext()){ object o =it.next(); ...}
參考資料來源:網路:java集合類
❷ java用map把list中首字母相同的單詞放在一起
可以放在一起的
放在一起的方法有;
1. 先創建一個list集合來存放map對象,然後在創建幾個map對象來設置值
2.對map對象進行值的設置,然後把它添加到list中
3.創建一個resultMap的對象用來存最終結果
4.因為map的可以是set集合所以不會重復,就可以這樣設置把所以出現在list中map的key值都設置到resultMap對象中初始值為0
5.然後再次重新遍歷list中的所以map值與resultMap中對應的map的key相同的值相加,因為上一步對resultMap的初始化所以不會擔心key不存在的情況,因此這里就可以實現累加效果
6.最後把resultMap值輸出來就可以看到統計結果了。
❸ JAVA中的List里的Map 如何去除重復的Key
「可以利用Map的key不重復特性: 遍歷List,遍歷過程中將List中取出的值作為key保存到一個臨時的Map中,Map的value可以自己隨意設定。 注意,在保存到Map之前,使用map.get("key")從Map中獲取對應是數據,判斷是否為null即可判斷該List中的值是否...」
❹ Java中List、Set、Map介面之間的區別和聯系
List 用於遍歷一個數組時效率最高;比如在循環顯示所有信息時經常用到;
Set中的元素是不能重復的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象;雖然Set同List都實現了Collection介面,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是在HashMap的基礎上來實現的,這個就是Set和List的根本區別。 Map 就是鍵值對map(鍵,值),鍵是Sting 類型 值是Object (對象類型),所以在知道某條信息的一項時查詢其他項就用該方法,效率最高!(以上個人見解!)
詳細:數組和其它容器的區別主要有三方面:效率,類型,和保存基本類型的能力.在Java中,數組是一種效率很高的存儲和隨機訪問對象引用序列的方式.數組是一 個簡單的線性序列,因此訪問速度很快,但也損失了其它一些特性.創建一個數組對象後,大小就固定了,如果空間不夠,通常是再創建一個數組,然後把舊數組中 的所有引用移到新數組中.數組可可以保存基本類型,容器不行.
容器類不以具體的類型來處理對象,而是將所有的對象都以Object類型來處理,所以我們可以只創建一個容器,任意的Java對象都可以放進去.容器類可 以使用包裝類(Integer,Double等),以便把基本類型放入其中. List Set Map 都可以自動調整容量,數組不能.
Collection表示一組對象,這些對象也稱為collection的元素。一些 collection允許有重復的元素,而另一些則不允許。一些collection是有序的,而另一些則是無序的。JDK中不提供此介面的任何直接實 現,它提供更具體的子介面(如 Set 和 List)實現.
Map 將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多隻能映射一個值.Map 介面提供三種collection視圖,允許以鍵集、值集合或鍵值映射關系集的形式查看某個映射的內容。某些映射實現可明確保證其順序,如 TreeMap(有序) 類;某些映射實現則不保證順序,如 HashMap(無序) 類。Map可以像數組那樣擴展成多維數組,只要把每個值也做成一個Map就行了.
Collection和Map是Java容器中的兩種基本類型. 區別在於容器中每個位置保存的元素個數.Collection每個位置只能保存一個元素,包括List和Set.其中List以進入的順序保存一組元素; 而Set中的元素不能重復.ArrayList是一種List,HashSet是一種Set,將元素添加入任意Collection都可以使用add() 方法.Map保存的是健值對.使用put()為Map添加元素,它需要一個健和一個值作參數.
ArrayList和LinkedList都實現了List介面,ArrayList底層由數組支持LinkedList由雙向鏈表支持,因此,如果經常在表中插入或刪除元素LinkedList比較適合,如果經常查詢ArrayList比較適合.
Set的實現有TreeSet,HashSet,LinkedHashSet,HashSet查詢速度最快,LinkedHashSet保持元素插入次序,TreeSet基於TreeMap,生成一個總是處於排序狀態的Set.
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Vector : 基於Array的List,其實就是封裝了Array所不具備的一些功能方便我們使用,它不可能走入Array的限制。性能也就不可能超越Array。所以,在可能的情況下,我們要多運用Array。另外很重要的一點就是Vector「sychronized」的,這個也是Vector和ArrayList的唯一的區別。
ArrayList:同Vector一樣是一個基於Array上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優越一些,但是當運行到多線程環境中時,可需要自己在管理線程的同步問題。
LinkedList:LinkedList不同於前面兩種List,它不是基於Array的,所以不受Array性能的限制。它每一個節點(Node)都包含兩方面的內容:1.節點本身的數據(data);2.下一個節點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候就不用像基於Array的List一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了。這就是LinkedList的優勢。
List總結:
1. 所有的List中只能容納單個不同類型的對象組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];
2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
3. 所有的List中可以有null元素,例如[ tom,null,1 ];
4. 基於Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。
HashSet:雖然Set同List都實現了Collection介面,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是在HashMap的基礎上來實現的,這個就是Set和List的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set的對應存儲項。看看HashSet的add(Object obj)方法的實現就可以一目瞭然了。
public boolean add(Object obj)
{
return map.put(obj, PRESENT) == null;
}
這個也是為什麼在Set中不能像在List中一樣有重復的項的根本原因,因為HashMap的key是不能有重復的。
LinkedHashSet:HashSet的一個子類,一個鏈表。
TreeSet:SortedSet的子類,它不同於HashSet的根本就是TreeSet是有序的。它是通過SortedMap來實現的。
Set總結:
1. Set實現的基礎是Map(HashMap);
2. Set中的元素是不能重復的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象;
http://user.qzone.qq.com/530536333/blog/1283866146
List介面對Collection進行了簡單的擴充,它的具體實現類常用的有ArrayList和LinkedList。你可以將任何東西放到一個List容器中,並在需要時從中取出。ArrayList從其命名中可以看出它是一種類似數組的形式進行存儲,因此它的隨機訪問速度極快,而LinkedList的內部實現是鏈表,它適合於在鏈表中間需要頻繁進行插入和刪除操作。在具體應用時可以根據需要自由選擇。前面說的Iterator只能對容器進行向前遍歷,而ListIterator則繼承了Iterator的思想,並提供了對List進行雙向遍歷的方法。
Set介面也是Collection的一種擴展,而與List不同的時,在Set中的對象元素不能重復,也就是說你不能把同樣的東西兩次放入同一個Set容器中。它的常用具體實現有HashSet和TreeSet類。HashSet能快速定位一個元素,但是你放到HashSet中的對象需要實現hashCode()方法,它使用了前面說過的哈希碼的演算法。而TreeSet則將放入其中的元素按序存放,這就要求你放入其中的對象是可排序的,這就用到了集合框架提供的另外兩個實用類Comparable和Comparator。一個類是可排序的,它就應該實現Comparable介面。有時多個類具有相同的排序演算法,那就不需要在每分別重復定義相同的排序演算法,只要實現Comparator介面即可。集合框架中還有兩個很實用的公用類:Collections和Arrays。Collections提供了對一個Collection容器進行諸如排序、復制、查找和填充等一些非常有用的方法,Arrays則是對一個數組進行類似的操作。
Map是一種把鍵對象和值對象進行關聯的容器,而一個值對象又可以是一個Map,依次類推,這樣就可形成一個多級映射。對於鍵對象來說,像Set一樣,一個Map容器中的鍵對象不允許重復,這是為了保持查找結果的一致性;如果有兩個鍵對象一樣,那你想得到那個鍵對象所對應的值對象時就有問題了,可能你得到的並不是你想的那個值對象,結果會造成混亂,所以鍵的唯一性很重要,也是符合集合的性質的。當然在使用過程中,某個鍵所對應的值對象可能會發生變化,這時會按照最後一次修改的值對象與鍵對應。對於值對象則沒有唯一性的要求。你可以將任意多個鍵都映射到一個值對象上,這不會發生任何問題(不過對你的使用卻可能會造成不便,你不知道你得到的到底是那一個鍵所對應的值對象)。Map有兩種比較常用的實現:HashMap和TreeMap。HashMap也用到了哈希碼的演算法,以便快速查找一個鍵,TreeMap則是對鍵按序存放,因此它便有一些擴展的方法,比如firstKey(),lastKey()等,你還可以從TreeMap中指定一個范圍以取得其子Map。鍵和值的關聯很簡單,用pub(Object key,Object value)方法即可將一個鍵與一個值對象相關聯。用get(Object key)可得到與此key對象所對應的值對象。
❺ java中list裡面存放map,根據map中的某兩個個欄位進行排序
用Collections.sort(List list, Comparator c)
實現一個Comparator即可
public class MyComparator implements Comparator {
public int compare(Object o1, Object o2) {
Map m1=(Map)o1, m2=(Map)o2;
//從m1與m2取欄位值然後比較,大於返回版1,等於返回0,小於返回-1
}
public boolean equals(Object o) {
//同上權面類似
}
❻ Java中Set、List、Map集合類(介面)的特點及區別是什麼
Set:檢索元素效來率源低下,刪除和插入效率高,插入和刪除不會引起元素位置改變;
List:和數組類似,List可以動態增長,查找元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變;
Map:適合儲存鍵值對的數據。